Snowpark Container Services(SPCS)は、OCIコンテナイメージをSnowflakeのマネージド環境で直接実行する機能です。 ML推論、LLMホスティング、Webアプリ、カスタムETLなど、ウェアハウスでは実行できないワークロードをSnowflakeのセキュリティ・ガバナンスの下で稼働させられます。
SPCSはコンピュートプール、イメージレジストリ、サービスの3つのコンポーネントで構成されます。 コンピュートプールはコンテナを実行するノード群であり、ウェアハウスとは完全に分離された計算資源です。 イメージレジストリはSnowflakeアカウント内に組み込まれたOCI互換のプライベートレジストリで、 docker CLIからpush/pullできます。サービスはコンピュートプール上にデプロイされる コンテナの実行単位です。
コンピュートプールはサービスコンテナが実行されるノードのクラスタです。 INSTANCE_FAMILYでCPU/GPUの種類を指定し、MIN_NODES / MAX_NODESでオートスケールの範囲を制御します。
-- CPUコンピュートプール(軽量APIサーバー向け)
CREATE COMPUTE POOL ml_cpu_pool
MIN_NODES = 1
MAX_NODES = 3
INSTANCE_FAMILY = CPU_X64_S
AUTO_RESUME = TRUE
AUTO_SUSPEND_SECS = 600;
-- GPUコンピュートプール(ML推論向け)
CREATE COMPUTE POOL gpu_inference_pool
MIN_NODES = 1
MAX_NODES = 2
INSTANCE_FAMILY = GPU_NV_S
AUTO_RESUME = TRUE
AUTO_SUSPEND_SECS = 300;
-- コンピュートプールの状態確認
SHOW COMPUTE POOLS IN ACCOUNT;
DESCRIBE COMPUTE POOL gpu_inference_pool;INSTANCE_FAMILYの主な選択肢は以下のとおりです。
| INSTANCE_FAMILY | CPU/GPU | メモリ目安 | 主な用途 |
|---|---|---|---|
| CPU_X64_XS | 2 vCPU | 8 GB | 軽量バッチ、テスト |
| CPU_X64_S | 4 vCPU | 16 GB | APIサーバー、ETL |
| CPU_X64_M | 8 vCPU | 32 GB | 中規模処理 |
| GPU_NV_S | 1 GPU (T4相当) | 16 GB GPU | 小〜中規模推論 |
| GPU_NV_M | 1 GPU (A10G相当) | 24 GB GPU | 中規模推論・学習 |
| GPU_NV_L | 1 GPU (A100相当) | 40/80 GB GPU | LLM、大規模学習 |
SPCSではSnowflakeアカウント内にOCI準拠のプライベートイメージレジストリが用意されています。 docker CLIで認証し、ビルド済みイメージをpushします。
-- イメージリポジトリの作成
CREATE IMAGE REPOSITORY ml_images;
-- リポジトリURLの確認
SHOW IMAGE REPOSITORIES;
-- 例: myorg-myacct.registry.snowflakecomputing.com/ml_db/ml_schema/ml_images
-- CLIでログインしてpush
-- docker login myorg-myacct.registry.snowflakecomputing.com
-- docker tag my-model:v1 myorg-myacct.registry.snowflakecomputing.com/ml_db/ml_schema/ml_images/my-model:v1
-- docker push myorg-myacct.registry.snowflakecomputing.com/ml_db/ml_schema/ml_images/my-model:v1イメージリポジトリへのアクセスはSnowflakeのRBACで制御され、READ/WRITE権限をロールに付与します。 外部のDocker Hubやパブリックレジストリから直接pullすることはできないため、 ローカルまたはCI/CD環境でビルドしたイメージをSnowflakeレジストリへ再pushするワークフローが必要です。
サービスはコンテナの実行単位で、YAMLのサービス仕様(spec)で定義します。 specファイルをSnowflakeのステージにアップロードし、CREATE SERVICEで起動します。
-- サービス仕様(spec.yaml)をステージにアップロード
PUT file:///tmp/spec.yaml @ml_db.ml_schema.service_stage
AUTO_COMPRESS = FALSE
OVERWRITE = TRUE;
-- サービスの作成
CREATE SERVICE ml_inference_service
IN COMPUTE POOL gpu_inference_pool
FROM @ml_db.ml_schema.service_stage
SPEC = 'spec.yaml'
MIN_INSTANCES = 1
MAX_INSTANCES = 3
EXTERNAL_ACCESS_INTEGRATIONS = (egress_integration);
-- サービスの状態確認
SHOW SERVICES IN ACCOUNT;
SELECT SYSTEM$GET_SERVICE_STATUS('ml_inference_service');
SELECT SYSTEM$GET_SERVICE_LOGS(
'ml_inference_service', 0, 'inference-container', 100
);spec.yamlではコンテナイメージ、ポート、環境変数、ボリュームマウントなどを定義します。
# spec.yaml の例
spec:
containers:
- name: inference-container
image: /ml_db/ml_schema/ml_images/my-model:v1
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
memory: 8Gi
env:
MODEL_PATH: /models/v1
readinessProbe:
port: 8080
path: /health
endpoints:
- name: predict
port: 8080
public: true
volumes:
- name: model-volume
source: "@ml_db.ml_schema.model_stage"
uid: 1000
gid: 1000サービスをSQLから呼び出すにはサービス関数(Service Function)を作成します。 これによりSELECT文の中でコンテナの推論結果を取得できます。
-- サービス関数の作成
CREATE FUNCTION predict_sentiment(text VARCHAR)
RETURNS VARIANT
SERVICE = ml_inference_service
ENDPOINT = predict
AS '/predict';
-- SQLからの推論呼び出し
SELECT
review_id,
review_text,
predict_sentiment(review_text) AS sentiment
FROM product_reviews
WHERE review_date >= '2026-01-01';SPCSでGPUを活用する典型的なユースケースは3つあります。
SPCSのサービスはデフォルトで外部ネットワークへのアクセスが遮断されています。 外部APIの呼び出しやモデルのダウンロードが必要な場合はExternal Access Integrationを作成してegress通信を許可します。
-- ネットワークルールの作成
CREATE NETWORK RULE hf_egress_rule
TYPE = HOST_PORT
MODE = EGRESS
VALUE_LIST = ('huggingface.co:443', 'cdn-lfs.huggingface.co:443');
-- External Access Integrationの作成
CREATE EXTERNAL ACCESS INTEGRATION egress_integration
ALLOWED_NETWORK_RULES = (hf_egress_rule)
ENABLED = TRUE;ingressについてはendpointsのpublic: trueで外部公開でき、 Snowflakeの認証トークンによるアクセス制御が適用されます。
コンピュートプールのコストはノード数×稼働時間×INSTANCE_FAMILYごとの単価で決まります。 AUTO_SUSPEND_SECSを設定するとアイドル時に自動停止し、リクエスト到着時にAUTO_RESUMEで再起動します。 MIN_INSTANCES=0を設定すると、リクエストがないときにサービスを0インスタンスまでスケールダウンできます。
SnowPro
問題 1
Snowpark Container Services(SPCS)でGPUベースのML推論サービスをデプロイする際、正しい手順の組み合わせはどれですか?
正解: A
SPCSでは(1)GPUインスタンスファミリーを指定したコンピュートプールを作成、(2)Snowflake内蔵レジストリにイメージをpush、(3)CREATE SERVICEでデプロイ、が正しい手順です。ウェアハウスではなくコンピュートプールを使う点、外部レジストリからの直接pullが不可な点が試験頻出です。
Snowpark Container Servicesで使えるGPUインスタンスの種類は?
コンピュートプールのINSTANCE_FAMILYにGPU_NV_S(NVIDIA T4相当)、GPU_NV_M(A10G相当)、GPU_NV_L(A100相当)を指定できます。GPU_NV_Sは推論向き、GPU_NV_Lはファインチューニングや大規模学習に適しており、ワークロードの演算量に応じて選択します。利用可能なファミリーはクラウドリージョンによって異なるため、SHOW COMPUTE POOLS IN ACCOUNTの結果も確認してください。
SPCSのイメージレジストリとDocker Hubの違いは?
SPCSではSnowflake内蔵のOCI準拠イメージレジストリを使い、docker pushコマンドでイメージをアップロードします。レジストリURLは<org>-<account>.registry.snowflakecomputing.com/<db>/<schema>/<image_repo>の形式で、Snowflakeの認証・RBAC・ネットワークポリシーがそのまま適用されます。Docker Hubのようなパブリックレジストリからの直接pullはサポートされないため、ビルド済みイメージをSnowflakeレジストリへ再pushする必要があります。
SPCSのサービスはウェアハウスのクレジットを消費しますか?
いいえ。SPCSのサービスはコンピュートプール上のコンテナとして動作し、仮想ウェアハウスとは別のコンピュートリソースを使用します。課金はコンピュートプールのノード数×稼働時間で発生し、Serverless Creditモデルで計算されます。サービスからSnowflakeテーブルにアクセスするSQLはサービス関数経由でウェアハウスを使う場合がありますが、コンテナ自体の実行はウェアハウス非依存です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...