Container Runtime pour ML

Vue d’ensemble

Container Runtime pour ML est un ensemble d’environnements personnalisables préconfigurés conçus pour le machine learning sur Snowpark Container Services, couvrant l’expérimentation interactive et les charges de travail ML par lots telles que l’entraînement de modèles, le réglage des hyperparamètres, l’inférence par lots et le réglage fin. Cela inclut les frameworks de machine learning et d’apprentissage profond les plus connus. Utilisés avec les Notebooks Snowflake, ils offrent une expérience de ML de bout en bout.

Environnement d’exécution

Container Runtime pour ML fournit un environnement rempli de paquets et de bibliothèques qui prennent en charge une grande variété de tâches de développement ML à l’intérieur de Snowflake. En plus des paquets préinstallés, vous pouvez importer des paquets à partir de sources externes telles que des référentiels PyPI publics ou des référentiels de paquets hébergés en interne qui fournissent une liste de paquets approuvés pour une utilisation au sein de votre organisation.

Les exécutions de vos charges de travail ML Python personnalisées et de vos APIs d’entraînement personnalisées se produisent dans Snowpark Container Services, qui offre la possibilité de s’exécuter sur des pools de calcul par CPU ou GPU. Lors de l’utilisation d’APIs ML Snowflake, Container Runtime pour ML répartit le traitement entre les ressources disponibles.

Traitement distribué

Les APIs de modélisation et de chargement de données de ML Snowflake sont créées à partir du framework de traitement distribué de ML de Snowflake. Celui-ci maximise l’utilisation des ressources en exploitant pleinement la puissance de calcul disponible. Par défaut, ce framework utilise tous les GPUs sur des nœuds de plusieurs GPU, offrant des améliorations de performances significatives par rapport aux paquets open source et réduisant le temps d’exécution global.

Diagramme montrant comment la charge de travail est répartie pour le traitement ML.

Les charges de travail de machine learning, y compris le chargement et déchargement de données, sont exécutées dans un environnement de calcul géré par Snowflake. Ce framework permet une mise à l’échelle dynamique des ressources en fonction des exigences spécifiques de la tâche à accomplir, telles que l’entraînement de modèles ou le chargement de données. Le nombre de ressources, y compris l’allocation de GPU et de mémoire pour chaque tâche, peut être facilement configuré via les APIs fournies.

Optimisation du chargement et déchargement de données

Container Runtime fournit un ensemble d’APIs de connecteurs de données qui permettent de connecter les sources de données Snowflake (y compris les tables, DataFrames et les jeux de données) à des cadres ML populaires tels que PyTorch et TensorFlow, en tirant pleinement parti de plusieurs cœurs ou GPUs. Une fois chargées, les données peuvent être traitées à l’aide de paquets open source ou de l’une des APIs ML de Snowflake, y compris les versions distribuées décrites ci-dessous. Ces APIs se trouvent dans l’espace de noms snowflake.ml.data.

La classe snowflake.ml.data.data_connector.DataConnector connecte les DataFrames Snowpark ou les jeux de données Snowflake ML aux TensorFlow ou DataSets PyTorch ou aux DataFrames Pandas. Instanciez un connecteur à l’aide de l’une des méthodes de classe suivantes :

  • DataConnector.from_dataframe : accepte un DataFrame Snowpark.

  • DataConnector.from_dataset : accepte un jeu de données ML Snowflake, spécifié par nom et version.

  • DataConnector.from_sources : accepte une liste de sources, chacune pouvant être un DataFrame ou un jeu de données.

Une fois que vous avez instancié le connecteur (en appelant l’instance, par exemple, data_connector), appelez les méthodes suivantes pour produire le type de sortie souhaité.

  • data_connector.to_tf_dataset : renvoie un jeu de données TensorFlow pouvant être utilisé avec TensorFlow.

  • data_connector.to_torch_dataset : renvoie un jeu de données PyTorch pouvant être utilisé avec PyTorch.

Pour plus d’informations sur ces APIs, voir la référence d’API Snowflake ML.

Construire avec l’open source

Avec les images CPU et GPU de base qui sont pré-remplies avec les paquets ML populaires , et la possibilité d’installer des bibliothèques supplémentaires à l’aide de pip, les utilisateurs peuvent employer des cadres open source familiers et innovants dans les Snowflake Notebooks, sans déplacer les données hors de Snowflake. Vous pouvez faire évoluer le traitement en utilisant les APIs distribuées de Snowflake pour le chargement et déchargement des données, l’entraînement et l’optimisation des hyperparamètres, avec les APIs familières des paquets OSS les plus répandus, avec de petites modifications de l’interface pour permettre la mise à l’échelle des configurations.

Le code suivant illustre la création d’un classificateur XGBoost à l’aide de ces APIs :

from snowflake.snowpark.context import get_active_session
from snowflake.ml.data.data_connector import DataConnector
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

session = get_active_session()

# Use the DataConnector API to pull in large data efficiently
df = session.table("my_dataset")
pandas_df = DataConnector.from_dataframe(df).to_pandas()

# Build with open source

X = df_pd[['feature1', 'feature2']]
y = df_pd['label']

# Split data into test and train in memory
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=34)

# Train in memory
model = xgb.XGBClassifier()
model.fit(X_train, y_train)

# Predict
y_pred = model.predict(X_test)
Copy

Un entraînement optimisé

Container Runtime for ML offre un ensemble d’APIs d’entraînements distribuées , y compris des versions distribuées de LightGBM, PyTorch, et XGBoost, qui tirent pleinement parti des ressources disponibles dans l’environnement de conteneur. Vous les trouverez dans l’espace de noms snowflake.ml.modeling.distributors. Les APIs des classes distribuées sont similaires à celles des versions standards.

Pour plus d’informations sur ces APIs, voir la référence d’API.

XGBoost

La principale classe XGBoost est snowflake.ml.modeling.distributors.xgboost.XGBEstimator. Les classes associées comprennent :

  • snowflake.ml.modeling.distributors.xgboost.XGBScalingConfig

Pour un exemple d’utilisation de cette API, voir l’exemple de notebook XGBoost sur GPU dans le référentiel GitHub Snowflake Container Runtime pour ML.

LightGBM

La principale classe LightGBM est snowflake.ml.modeling.distributors.lightgbm.LightGBMEstimator. Les classes associées comprennent :

  • snowflake.ml.modeling.distributors.lightgbm.LightGBMScalingConfig

Pour un exemple d’utilisation de cette API, voir l’exemple de notebook LightGBM sur GPU dans le référentiel GitHub Snowflake Container Runtime pour ML.

PyTorch

La principale classe PyTorch est snowflake.ml.modeling.distributors.pytorch.PyTorchDistributor. Les classes et fonctions apparentées sont les suivantes :

  • snowflake.ml.modeling.distributors.pytorch.WorkerResourceConfig

  • snowflake.ml.modeling.distributors.pytorch.PyTorchScalingConfig

  • snowflake.ml.modeling.distributors.pytorch.Context

  • snowflake.ml.modeling.distributors.pytorch.get_context

Pour un exemple d’utilisation de cette API, voir l’exemple de notebook PyTorch sur GPU dans le référentiel GitHub Snowflake Container Runtime pour ML.

APIs de modélisation Snowflake ML

Lorsque les APIs de modélisation de Snowflake ML sont utilisées dans un Notebook, toute l’exécution a lieu dans l’environnement d’exécution du conteneur et non dans l’entrepôt de requêtes, à l’exception des APIs snowflake.ml.modeling.preprocessing, qui sont exécutées dans l’entrepôt de requêtes.

Limitations

  • Les API Snowflake ML Modeling ne prennent en charge que les méthodes d’inférence predict, predict_proba et predict_log_proba sur l’environnement Container Runtime pour ML. Les autres méthodes s’exécutent dans l’entrepôt de requêtes.

  • Les API Snowflake ML Modeling ne prennent en charge que les pipelines compatibles avec Sklearn sur Container Runtime pour ML.

  • Les API Snowflake ML Modeling ne prennent pas en charge les classes de prétraitement ou de métriques sur Container Runtime pour ML. Ces APIs s’exécutent dans l’entrepôt de requêtes.

  • Les méthodes fit, predict et score sont exécutées sur Container Runtime pour ML. Les autres méthodes ML Snowflake s’exécutent dans l’entrepôt de requêtes.

  • sample_weight_cols n’est pas pris en charge pour les modèles LightGBM ou XGBoost.

Spécification de l’image Container Runtime

Vous pouvez choisir entre des types d’images de CPU ou de GPU lors de la création d’un notebook à exécuter sur Container Runtime. Les deux images sont préinstallées avec des frameworks ML populaires, comme scikit-learn et PyTorch. Vous pouvez également utiliser Snowpark ML et tout ce qu’il inclut.

Liste complète pour une image v1 par CPU

Ce tableau est une liste complète des paquets Python préinstallés sur l’image v1 par CPU :

Paquet

Version

absl-py

1.4.0

aiobotocore

2.7.0

aiohttp

3.9.5

aiohttp-cors

0.7.0

aioitertools

0.12.0

aiosignal

1.2.0

aiosignal

1.3.1

altair

5.4.1

annotated-types

0.6.0

anyio

3.5.0

appdirs

1.4.4

arviz

0.17.1

asn1crypto

1.5.1

asttokens

2.0.5

async-timeout

4.0.3

async-timeout

4.0.3

atpublic

4,0

attrs

23.1.0

attrs

23.2.0

backoff

2.2.1

bayesian-optimization

1.5.1

blinker

1.6.2

botocore

1.31.64

bottleneck

1.3.7

brotli

1.0.9

cachetools

5.3.3

causalpy

0.4.0

certifi

2024.8.30

cffi

1.16.0

charset-normalizer

3.3.2

click

8.1.7

clikit

0.6.2

cloudpickle

2.2.1

cmdstanpy

1.2.4

colorama

0.4.6

colorful

0.5.4

cons

0.4.6

contourpy

1.2.0

crashtest

0.3.1

cryptography

42.0.8

cycler

0.11.0

datasets

2.16.1

decorator

5.1.1

deprecated

1.2.13

dill

0.3.7

distlib

0.3.8

etuples

0.3.9

evaluate

0.4.2

exceptiongroup

1.2.0

executing

0.8.3

filelock

3.13.1

flask

3.0.3

fonttools

4.51.0

frozenlist

1.4.0

frozenlist

1.4.1

fsspec

2023.10.0

gitdb

4.0.7

gitpython

3.1.41

gmpy2

2.1.2

google-api-core

2.19.1

google-auth

2.29.0

googleapis-common-protos

1.63.2

graphviz

0.20.1

grpcio

1.66.1

grpcio-tools

1.62.3

gunicorn

22.0.0

h5netcdf

1.2.0

h5py

3.11.0

holidays

0,57

httpstan

4.13.0

huggingface-hub

0.24.6

idna

3.6

idna

3.7

importlib-metadata

6.11.0

importlib-resources

6.4.5

ipython

8.27.0

itsdangerous

2.2.0

jedi

0.19.1

jinja2

3.1.4

jmespath

1.0.1

joblib

1.4.2

jsonschema

4.19.2

jsonschema-specifications

2023.7.1

kiwisolver

1.4.4

lightgbm

3.3.5

lightgbm-ray

0.1.9

logical-unification

0.4.6

markdown-it-py

2.2.0

markupsafe

2.1.3

marshmallow

3.22.0

matplotlib

3.8.4

matplotlib-inline

0.1.6

mdurl

0.1.0

minikanren

1.0.3

mkl-fft

1.3.10

mkl-random

1.2.7

mkl-service

2.4.0

mlruntimes-client

0.2.0

mlruntimes-service

0.2.0

modin

0.31.0

mpmath

1.3.0

msgpack

1.0.3

multidict

6.0.4

multidict

6.0.5

multipledispatch

0.6.0

multiprocess

0.70.15

narwhals

1.8.4

networkx

3,3

nltk

3.9.1

numexpr

2.8.7

numpy

1.24.3

opencensus

0.11.3

opencensus-context

0.1.3

opencv-python

4.10.0.84

opentelemetry-api

1.23.0

opentelemetry-exporter-otlp-proto-common

1.23.0

opentelemetry-exporter-otlp-proto-grpc

1.25.0

opentelemetry-proto

1.23.0

opentelemetry-sdk

1.23.0

opentelemetry-semantic-conventions

0.44b0

packaging

23,1

pandas

2.2.3

parso

0.8.3

pastel

0.2.1

patsy

0.5.6

pexpect

4.8.0

pillow

9.5.0

pip

24,2

platformdirs

2.6.2

plotly

5.22.0

ply

3,11

prometheus-client

0.20.0

prompt-toolkit

3.0.43

prophet

1.1.5

proto-plus

1.24.0

protobuf

4.24.4

psutil

5.9.0

ptyprocess

0.7.0

pure-eval

0.2.2

pyarrow

15.0.0

pyarrow-hotfix

0,6

pyasn1

0.4.8

pyasn1-modules

0.2.8

pycparser

2,21

pydantic

2.8.2

pydantic-core

2.20.1

pydeck

0.9.1

pygments

2.15.1

pyjwt

2.8.0

pylev

1.4.0

pymc

5.16.1

pympler

1.1

pyopenssl

24.2.1

pyparsing

3.0.9

pyqt5

5.15.10

pyqt5-sip

12.13.0

pysimdjson

6.0.2

pysocks

1.7.1

pystan

3.10.0

pytensor

2.13.1

pytensor

2.23.0

python-dateutil

2.8.3+snowflake1

pytimeparse

1.1.8

pytz

2024,1

pytz-deprecation-shim

0.1.0.post0

pyyaml

6.0.1

ray

2.10.0

referencing

0.30.2

regex

2024.7.24

requests

2.32.3

retrying

1.3.4

rich

13.7.1

rpds-py

0.10.6

rsa

4.7.2

s3fs

2023.10.0

safetensors

0.4.4

scikit-learn

1.3.0

scipy

1.13.1

seaborn

0.13.2

setproctitle

1.2.2

setuptools

70.0.0

sip

6.7.12

six

1.16.0

smart-open

5.2.1

smmap

4.0.0

sniffio

1.3.0

snowbooks

1.46.0

snowflake

0.12.1

snowflake-connector-python

3.12.0

snowflake-core

0.12.1

snowflake-legacy

0.12.1

snowflake-ml-python

1.6.2

snowflake-snowpark-python

1.18.0

snowflake-telemetry-python

0.5.0

sortedcontainers

2.4.0

sqlparse

0.5.1

stack-data

0.2.0

stanio

0.5.1

statsmodels

0.14.2

streamlit

1.26.0

sympy

1.13.2

tenacity

8.2.3

tensorboardx

2.6.2.2

threadpoolctl

3.5.0

tokenizers

0.15.1

toml

0.10.2

tomli

2.0.1

tomlkit

0.11.1

toolz

0.12.0

torch

2.3.0

tornado

6.4.1

tqdm

4.66.4

traitlets

5.14.3

transformers

4.36.0

typing-extensions

4.12.2

tzdata

2024,2

tzlocal

4.3.1

unicodedata2

15.1.0

urllib3

2.0.7

validators

0.34.0

virtualenv

20.17.1

watchdog

5.0.3

wcwidth

0.2.5

webargs

8.6.0

werkzeug

3.0.3

wheel

0.43.0

wrapt

1.14.1

xarray

2023.6.0

xarray-einstats

0.6.0

xgboost

1.7.6

xgboost-ray

0.1.19

xxhash

2.0.2

yarl

1.11.0

yarl

1.9.4

zipp

3.17.0

Liste complète pour une image v1 par GPU

Ce tableau est une liste complète des paquets Python préinstallés sur l’image v1 par GPU :

Paquet

Version

absl-py

1.4.0

accelerate

0.34.2

aiobotocore

2.7.0

aiohttp

3.9.5

aiohttp-cors

0.7.0

aioitertools

0.12.0

aiosignal

1.2.0

aiosignal

1.3.1

altair

5.4.1

annotated-types

0.6.0

anyio

3.5.0

appdirs

1.4.4

arviz

0.17.1

asn1crypto

1.5.1

asttokens

2.0.5

async-timeout

4.0.3

async-timeout

4.0.3

atpublic

4,0

attrs

23.1.0

attrs

23.2.0

backoff

2.2.1

bayesian-optimization

1.5.1

blinker

1.6.2

botocore

1.31.64

bottleneck

1.3.7

brotli

1.0.9

cachetools

5.3.3

causalpy

0.4.0

certifi

2024.8.30

cffi

1.16.0

charset-normalizer

3.3.2

click

8.1.7

clikit

0.6.2

cloudpickle

2.0.0

cmake

3.30.3

cmdstanpy

1.2.4

colorama

0.4.6

colorful

0.5.4

cons

0.4.6

contourpy

1.2.0

crashtest

0.3.1

cryptography

42.0.8

cycler

0.11.0

datasets

2.16.1

decorator

5.1.1

deprecated

1.2.13

dill

0.3.7

diskcache

5.6.3

distlib

0.3.8

distro

1.9.0

etuples

0.3.9

evaluate

0.4.2

exceptiongroup

1.2.0

executing

0.8.3

fastapi

0.115.0

filelock

3.13.1

flask

3.0.3

fonttools

4.51.0

frozenlist

1.4.0

frozenlist

1.4.1

fsspec

2023.10.0

gitdb

4.0.7

gitpython

3.1.41

gmpy2

2.1.2

google-api-core

2.19.1

google-auth

2.29.0

googleapis-common-protos

1.63.2

graphviz

0.20.1

grpcio

1.66.1

grpcio-tools

1.62.3

gunicorn

22.0.0

h11

0.14.0

h5netcdf

1.2.0

h5py

3.11.0

holidays

0,57

httpcore

1.0.5

httpstan

4.13.0

httptools

0.6.1

httpx

0.27.2

huggingface-hub

0.24.6

idna

3.6

idna

3.7

importlib-metadata

6.11.0

importlib-resources

6.4.5

interegular

0.3.3

ipython

8.27.0

itsdangerous

2.2.0

jedi

0.19.1

jinja2

3.1.4

jiter

0.5.0

jmespath

1.0.1

joblib

1.4.2

jsonschema

4.19.2

jsonschema-specifications

2023.7.1

kiwisolver

1.4.4

lark

1.2.2

lightgbm

4.5.0

lightgbm-ray

0.1.9

llvmlite

0.43.0

lm-format-enforcer

0.10.3

logical-unification

0.4.6

markdown-it-py

2.2.0

markupsafe

2.1.3

marshmallow

3.22.0

matplotlib

3.8.4

matplotlib-inline

0.1.6

mdurl

0.1.0

minikanren

1.0.3

mkl-fft

1.3.10

mkl-random

1.2.7

mkl-service

2.4.0

mlruntimes-client

0.2.0

mlruntimes-service

0.2.0

modin

0.31.0

mpmath

1.3.0

msgpack

1.0.3

multidict

6.0.4

multidict

6.0.5

multipledispatch

0.6.0

multiprocess

0.70.15

narwhals

1.8.4

nest-asyncio

1.6.0

networkx

3,3

ninja

1.11.1.1

nltk

3.9.1

numba

0.60.0

numexpr

2.8.7

numpy

1.24.3

nvidia-cublas-cu12

12.1.3.1

nvidia-cuda-cupti-cu12

12.1.105

nvidia-cuda-nvrtc-cu12

12.1.105

nvidia-cuda-runtime-cu12

12.1.105

nvidia-cudnn-cu12

8.9.2.26

nvidia-cufft-cu12

11.0.2.54

nvidia-curand-cu12

10.3.2.106

nvidia-cusolver-cu12

11.4.5.107

nvidia-cusparse-cu12

12.1.0.106

nvidia-ml-py

12.560.30

nvidia-nccl-cu12

2.20.5

nvidia-nvjitlink-cu12

12.6.68

nvidia-nvtx-cu12

12.1.105

openai

1.50.1

opencensus

0.11.3

opencensus-context

0.1.3

opencv-python

4.10.0.84

opentelemetry-api

1.23.0

opentelemetry-exporter-otlp-proto-common

1.23.0

opentelemetry-exporter-otlp-proto-grpc

1.25.0

opentelemetry-proto

1.23.0

opentelemetry-sdk

1.23.0

opentelemetry-semantic-conventions

0.44b0

outlines

0.0.46

packaging

23,1

pandas

2.2.3

parso

0.8.3

pastel

0.2.1

patsy

0.5.6

peft

0.5.0

pexpect

4.8.0

pillow

9.5.0

pip

24,2

platformdirs

2.6.2

plotly

5.22.0

ply

3,11

prometheus-client

0.20.0

prometheus-fastapi-instrumentator

7.0.0

prompt-toolkit

3.0.43

prophet

1.1.5

proto-plus

1.24.0

protobuf

4.24.4

psutil

5.9.0

ptyprocess

0.7.0

pure-eval

0.2.2

py-cpuinfo

9.0.0

pyairports

2.1.1

pyarrow

15.0.0

pyarrow-hotfix

0,6

pyasn1

0.4.8

pyasn1-modules

0.2.8

pycountry

24.6.1

pycparser

2,21

pydantic

2.8.2

pydantic-core

2.20.1

pydeck

0.9.1

pygments

2.15.1

pyjwt

2.8.0

pylev

1.4.0

pymc

5.16.1

pympler

1.1

pyopenssl

24.2.1

pyparsing

3.0.9

pyqt5

5.15.10

pyqt5-sip

12.13.0

pysimdjson

6.0.2

pysocks

1.7.1

pystan

3.10.0

pytensor

2.13.1

pytensor

2.23.0

python-dateutil

2.8.3+snowflake1

python-dotenv

1.0.1

pytimeparse

1.1.8

pytz

2024,1

pytz-deprecation-shim

0.1.0.post0

pyyaml

6.0.1

pyzmq

26.2.0

ray

2.10.0

referencing

0.30.2

regex

2024.7.24

requests

2.32.3

retrying

1.3.4

rich

13.7.1

rpds-py

0.10.6

rsa

4.7.2

s3fs

2023.10.0

safetensors

0.4.4

scikit-learn

1.3.0

scipy

1.9.3

seaborn

0.13.2

sentencepiece

0.1.99

setproctitle

1.2.2

setuptools

70.0.0

sip

6.7.12

six

1.16.0

smart-open

5.2.1

smmap

4.0.0

sniffio

1.3.0

snowbooks

1.46.0

snowflake

0.12.1

snowflake-connector-python

3.12.0

snowflake-core

0.12.1

snowflake-legacy

0.12.1

snowflake-ml-python

1.6.2

snowflake-snowpark-python

1.18.0

snowflake-telemetry-python

0.5.0

sortedcontainers

2.4.0

sqlparse

0.5.1

stack-data

0.2.0

stanio

0.5.1

starlette

0.38.6

statsmodels

0.14.2

streamlit

1.26.0

sympy

1.13.2

tenacity

8.2.3

tensorboardx

2.6.2.2

threadpoolctl

3.5.0

tiktoken

0.7.0

tokenizers

0.20.0

toml

0.10.2

tomli

2.0.1

tomlkit

0.11.1

toolz

0.12.0

torch

2.3.1

torchvision

0.18.1

tornado

6.4.1

tqdm

4.66.4

traitlets

5.14.3

transformers

4.45.1

triton

2.3.1

typing-extensions

4.12.2

tzdata

2024,2

tzlocal

4.3.1

unicodedata2

15.1.0

urllib3

2.0.7

uvicorn

0.31.0

uvloop

0.20.0

validators

0.34.0

virtualenv

20.17.1

vllm

0.5.3.post1

vllm-flash-attn

2.5.9.post1

watchdog

5.0.3

watchfiles

0.24.0

wcwidth

0.2.5

webargs

8.6.0

websockets

13,1

werkzeug

3.0.3

wheel

0.43.0

wrapt

1.14.1

xarray

2023.6.0

xarray-einstats

0.6.0

xformers

0.0.27

xgboost

1.7.6

xgboost-ray

0.1.19

xxhash

2.0.2

yarl

1.11.0

yarl

1.9.4

zipp

3.17.0

Prochaines étapes