アーティファクトの概念¶
アーティファクトは、ワークロードが何を実行するかを記述します。具体的には、イメージURI、ポート、エントリーポイント、環境変数、ヘルスプローブを含むコンテナ仕様です。ワークロードはアーティファクトから作成されます。ロックされた1つのアーティファクトは、多くのワークロードの基盤として機能します。
アーティファクトのタイプ¶
アーティファクトは、type判別子を使用します。APIはservice(デフォルト)およびnim(NVIDIA NIMモデルアーティファクト)を受け付けます。どちらも同じマルチコンテナのcontainerGroupsの形状を使用しますが、NIMでは、生成されたAPIリファレンスにオプションのストレージとGPU向けのオートスケーリング指標が追加されます。
| タイプ | 使用するタイミング |
|---|---|
service |
イメージを提供し、プラットフォームがそれらを実行する(プライマリに加えてオプションのサイドカーコンテナ)、コンテナベースのワークロード。推論サーバー、エージェントコンテナ(LangGraph、CrewAI、AutoGen)、API、およびWebサービスが含まれます。 |
nim |
NIM固有のスケジューリング、ストレージオプション、およびスケーリングシグナル(gpuCacheUtilization、gpuRequestQueueDepth)が必要な場合の、NVIDIA NIMモデルサービング。NimArtifactSpecおよびスケーリング指標については、Workload APIリファレンスを参照してください。 |
NIMアーティファクトには、オプションのstorageフィールド(NimStorageConfig)があり、2つの選択肢があります。dedicatedPvc(デフォルト)は、モデルの重み用にワークロード独自のPVCを提供します。一方、nimCacheは、モデルイメージをキーとするクラスター全体のPVCを使用します。複数のワークロードが同じNIMイメージを共有する場合は、クラスターが重みのキャッシュされたコピーを1つだけ保持するように、nimCacheを選択します。
NimStorageConfigのフィールド:
| フィールド | タイプ | デフォルト | 説明 |
|---|---|---|---|
mode |
"dedicatedPvc" | "nimCache" |
"dedicatedPvc" |
モデルの重みのストレージ戦略。 |
pvcSize |
文字列(Kubernetesの数量) | なし | PVCサイズ(例:"150Gi")。modeが"dedicatedPvc"の場合にのみ有効です。 |
NIMアーティファクトでは、事前構成されたモデル設定のためにNIMテンプレートを参照する、オプションのtemplateIdフィールド(文字列)も受け付けます。
コンテナの要件¶
プラットフォームが実行するすべてのコンテナは、以下のベースライン要件を満たしている必要があります。
| 要件 | 理由 |
|---|---|
linux/amd64向けにビルドされていること |
プラットフォームはx86-64ノード上で動作します。ARM向けにビルドされたイメージ(たとえば、デフォルトのdocker buildを使用するApple Silicon上など)は起動に失敗します。正しいアーキテクチャを生成するには、docker buildx build --platform linux/amd64を使用してビルドします。 |
| 非rootユーザーとして実行する | プラットフォームはコンテナを非特権で実行します。 |
| 1024から65535の間のポートでリッスンする | コンテナは特権ポート(0~1023)にバインドできません。ポートはcontainers[].portを介してアーティファクトで設定されます。 |
| HTTPサーバーを公開する | プラットフォームは、呼び出しトラフィックをHTTPとしてプライマリコンテナにプロキシします。 |
| Readinessプローブのエンドポイントを実装する | プラットフォームはreadinessProbe.pathをポーリングして準備状況を判断します。 |
| SIGTERMシグナルのグレースフルな処理を実装している | プラットフォームはワークロードを中断する場合があります(ノードのメンテナンスなど)。この場合、猶予期間を通知するためにコンテナにSIGTERMが送信されます。この期間中、コンテナは実行中のプロセスや接続をドレインしてから、プラットフォームがSIGKILLへとエスカレートします。猶予期間は、インストール時にクラスターレベルで設定されます。 |
プライマリコンテナと非プライマリコンテナ
コンテナグループには、正確に1つのプライマリコンテナ(primary: true)と任意の数のサイドカーがあります。プライマリコンテナはportを定義しなければなりません。非プライマリコンテナ(サイドカー)はportを省略しなければなりません。これらを誤って割り当てると、アーティファクトの作成または更新時に422検証エラーが返されます。
イメージビルド設定¶
ドラフトのserviceアーティファクトの場合、imageUriの代わりにコンテナにimageBuildConfigを設定します。これにより、アップロードされたソースコードからビルドされます(POST /artifacts/{id}/builds)。事前ビルド済みのimageUriまたはimageBuildConfigのいずれかを提供します(両方は不可)。ビルドが成功すると、プラットフォームはimageUriに値を入力します。
ImageBuildConfig.dockerfileは判別可能ユニオン(discriminated union)です。sourceフィールドはタグであり、その値によって以下のどのフィールドが適用されるかが決まります。デフォルトはprovidedで、ソースコード内の./Dockerfileが使用されます。
source |
スキーマ | フィールド |
|---|---|---|
provided |
ProvidedDockerfile |
path(文字列、デフォルト ./Dockerfile)。同期されたソースコード内のDockerfileへの相対パス。 |
generated |
GeneratedDockerfile |
executionEnvironmentId、executionEnvironmentVersionId、entrypoint。プラットフォームは実行環境のベースイメージからDockerfileを生成します。 |
提供されたDockerfileを使用する例:
"imageBuildConfig": {
"dockerfile": {
"source": "provided",
"path": "./Dockerfile"
}
}
pathを省略すると、デフォルトの./Dockerfileが使用されます。イメージビルドRESTを参照してください。
イメージURIの検証¶
アーティファクトを作成、更新、またはクローン化する際、プラットフォームはすべてのコンテナのimageUriを、クラスターで設定された許可リストおよび拒否リストと照合して検証します。 デフォルトでは、広く知られているパブリックレジストリ(例:Docker Hub、Quay.io、GHCR、パブリックECR(public.ecr.aws)、GitLab Container Registry、JFrog、NVIDIA NGC)は許可されていますが、内部レジストリおよびクラウドプロバイダーのプライベートレジストリ(プライベート ECR、ACR、GCR、GCP Artifact Registry)は許可されていません。 クラスター管理者はこのポリシーをカスタマイズできるため、許可されるレジストリの具体的なセットはインストール環境によって異なる場合があります。
imageUriを直接指定しているコンテナのみがチェックの対象となります。imageBuildConfig(コードからワークロードへの構築フロー)を通じて構築されたコンテナは、この時点ではimageUriを持っていないため、チェックの対象外となります。
許可されていないimageUriの場合、アーティファクトの作成、更新、またはクローン化は失敗し、以下のいずれかのエラーが発生します。
| エラー | 原因 |
|---|---|
Image URI '<uri>' is not permitted on this cluster. |
URIが、クラスターが拒否するパターンに一致しています。 |
Image URI '<uri>' is not in the permitted image registry allowlist. |
URIが、クラスターが許可するどのパターンにも一致しません。 |
いずれのエラーも解決するには、クラスターが許可するレジストリにイメージをプッシュし、imageUriでそれを参照してください。
環境変数のタイプ¶
コンテナ環境変数(environmentVars)は、sourceフィールドの判別可能ユニオン(discriminated union)です。 APIでは3つのタイプを受け付けます。
| タイプ | source |
フィールド | 説明 |
|---|---|---|---|
StringEnvironmentVariable |
"string"(またはsourceを省略) |
name、value |
プレーンテキストのキーと値のペア。機微情報が含まれない設定に使用します。 |
CredentialEnvironmentVariable |
"dr-credential" |
name、drCredentialId、key |
実行時にDataRobot資格情報サービスから値を検索します。 シークレット、トークン、パスワードに使用します。 |
ApiKeyEnvironmentVariable |
"api-key" |
name(オプション) |
ワークロードごとのAPIキーで、呼び出し元ユーザーをスコープとし、Protonの作成時に自動的に解決されます。呼び出し元から値やIDが指定されることはありません。nameを省略した場合、デフォルトはDATAROBOT_API_TOKENとなります。コンテナがDataRobot APIに対して認証する必要がある場合に使用します。 |
3つのタイプすべてを使用した例:
"environmentVars": [
{"name": "APP_MODE", "value": "production"},
{"source": "dr-credential", "name": "DB_PASSWORD", "drCredentialId": "64abc...", "key": "password"},
{"source": "api-key"}
]
api-keyエントリーにはnameがありません。プラットフォームがこれを、DataRobot SDKが期待する標準的な名前であるDATAROBOT_API_TOKENに解決します。 トークンを別の名前でマウントするには、nameを明示的に設定してください:{"source": "api-key", "name": "MY_DR_TOKEN"}。
これらのワークロードごとのキーは、コンソールのアカウント設定 > APIのキーとツール > Workload APIキーで確認でき、そこで名前を変更したり削除したりすることができます。詳しくは、APIキーの管理を参照してください。
プラットフォームが管理する環境変数¶
アーティファクト仕様で宣言されたenvironmentVarsに加え、プラットフォームは実行時にすべてのコンテナに一連の環境変数を注入します。これらは仕様には反映されず、GET /artifacts/{id}やGET /workloads/{id}によっても返されず、削除することもできません。environmentVarsを通じて同じ名前の環境変数を宣言した場合、その値が優先されます。
| 変数 | 説明 |
|---|---|
DATAROBOT_ENDPOINT |
DataRobot APIのベースURL。デプロイ設定から算出されます。この値を使用して、DataRobot SDKを初期化したり、コンテナ内部からAPIリクエストを構築したりします。 |
DATAROBOT_PUBLIC_API_ENDPOINT |
DataRobotのパブリックAPIのURL。ワークロードに外部URLが設定されている場合にのみ注入されます。 |
WORKLOAD_ID |
コンテナが実行されているワークロードのID。これを使用して、API呼び出しのスコープを所有するワークロードに戻します。 |
OTEL_EXPORTER_OTLP_ENDPOINT |
OTelコレクターのエンドポイント。 SDKはこの値を自動的に取得します。テレメトリをカスタムコレクターにルーティングする場合を除き、ハードコーディングやオーバーライドは行わないでください。 |
OTEL_EXPORTER_OTLP_HEADERS |
OTelコレクター用の認証ヘッダー。プラットフォームによって管理されています。オーバーライドしないでください。 |
OTEL_EXPORTER_OTLP_PROTOCOL |
エクスポーター用のOTLPトランスポートプロトコルで、http/protobufに設定されています。プラットフォームによって管理されています。オーバーライドしないでください。 |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
トレース専用のOTLPトランスポートプロトコルで、http/protobufに設定されています。一部のモデルでは、上記の汎用的な変数ではなく、このシグナル固有の変数のみが適用されます。 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
OTel SDKのメトリクスの時間性設定で、lowmemoryに設定されています。 |
OTEL_RESOURCE_ATTRIBUTES |
トレースやメトリクス内でワークロードを識別するためのOTelリソース属性。 |
アーティファクトのライフサイクル¶
このセクションでは、アーティファクトに関連するdraftとlockedを定義します。ワークロード作成の判断、つまりそれぞれがどの場合に適合し、TTL(time-to-live)、重要度、置き換えルールに関して何を意味するかについては、ドラフトとロックの選択を参照してください。各ステータスは、ライフサイクルと編集可能性が異なります。
| ステータス | 編集可能 | 説明 |
|---|---|---|
draft |
はい | デフォルトのステータス。可変。開発中にPATCH/PUTで更新します。 |
locked |
いいえ | 不変。一度設定すると変更できません。本番ワークロードに必要です。 |
ロックは一方向です。ロックされたアーティファクトはドラフトに戻すことができません。ロックされたアーティファクトをさらに反復するには、新しいドラフトアーティファクトを作成します。次のいずれかの方法でアーティファクトをロックできます。
| 方法 | プロセス |
|---|---|
| 直接ロック | PATCH /artifacts/{id}を{"status": "locked"}で呼び出します。これにより、関連するワークロードの統計情報が自動的にリセットされ、本番環境がクリーンなベースラインから開始されます。 |
| 昇格 | POST /workloads/{id}/promoteを呼び出します。本番環境への昇格を参照してください。これにより、統計情報も消去され、ドラフトワークロードの8時間TTLが単一の呼び出しで削除されます。 |
削除ルール
ロックされたアーティファクトは削除できません。実行中のproton(ドラフトまたはロック)を持つアーティファクトも削除できません。まず、バックとなるワークロードを停止または削除してください。
アーティファクトとワークロード:何がどこに存在するか¶
アーティファクトは何を実行するかを定義し、ワークロードランタイムはどのように実行するかを定義します。ランタイムはワークロードごとの環境変数のオーバーライドを受け付けません。デプロイ間で異なる必要がある値は、アーティファクトのenvironmentVarsに属します。
| レイヤー | ここに存在するもの | 可変性 | 例 |
|---|---|---|---|
アーティファクト(spec.containerGroups[].containers[]) |
コンテナのトポロジー。イメージURIまたはビルド設定、ポート、エントリーポイント、環境変数、プローブ。 | lockedになると不変。 |
imageUri、imageBuildConfig、port、entrypoint、environmentVars、readinessProbe。 |
ワークロード(runtime.containerGroups[]) |
デプロイ時の設定。レプリカ、オートスケーリング、コンテナごとのリソース割り当て、リソースバンドル。 | 常に可変。ロックされたワークロードでは、PATCH /workloads/{id}/settingsを介した変更は即座に有効になるのではなく、ローリング置換をトリガーします。(ロック時に不変になるのはアーティファクト仕様であり、ランタイムではありません。) |
replicaCount、autoscaling、コンテナごとのresourceAllocation、resourceBundles。 |
コンテナ名とグループ名のルール
各コンテナのname(および対応するランタイムオーバーライドのname)は、DNSラベル構文に従います。小文字、数字、ハイフンを使用し、小文字で始まり、文字または数字で終わる必要があり、最大63文字です。ランタイムは、これらの名前によってcontainerGroups[].containers[]のエントリをアーティファクトに一致させるため、正確に一致している必要があります。
フィールドをどこに定義するかを決定するときは、次のガイダンスを考慮してください。
- フィールドがコンテナのアイデンティティの一部である場合(どのコードが実行されるか、どのポートでリッスンするか、どの環境変数が必要か)、それはアーティファクト仕様に属します。
- フィールドがデプロイ時のつまみ(レプリカ数、CPU割り当て、スケーリングポリシー)である場合、それはワークロードランタイムに属します。
アーティファクトリポジトリ¶
アーティファクトリポジトリは、アーティファクトのバージョンをグループ化し、以下を提供します。
| 機能 | 得られるもの |
|---|---|
| バージョン履歴 | 単一の場所にあるアーティファクトのリビジョンの追跡可能な系統。 |
| 共有ガバナンス | コレクションを読み取りまたは変更できるユーザーを制御する、リポジトリ上のsharedRoles付与。 |
| 発見可能性 | 同じ製品またはチームに属するアーティファクトをより簡単に発見できます。 |
artifactRepositoryIdを設定してアーティファクトを初めて作成すると、プラットフォームは自動的にリポジトリを作成します。