1.5. AI モデルを OCI イメージにパッケージ化する
モデルを OCI イメージにパッケージ化し、ModelCar アプローチを使用して、オフライン環境をセットアップすることができます。ModelCar アプローチを使用すると、モデルを他のコンテナーイメージと同じように埋め込むことができます。
S3 互換のオブジェクトストレージまたは設定済みの永続ボリューム要求がすでにある場合は、AI モデルをそれらのリソースにアップロードできますが、ModelCar アプローチのみがテストおよびサポートされます。
前提条件
- マシンへの root ユーザーアクセス権がある。
-
OpenShift CLI (
oc) がインストールされている。 - Podman がインストールされている。
- モデルをいつでも使用できる。
vLLM モデルサーバーに適した OCI イメージの構築に関する記事 Build and deploy a ModelCar container in OpenShift AI の "How to build a ModelCar container" セクションの概念を理解している。
注記正確なディレクトリー構造はモデルサーバーによって異なります。次の例では、OpenVINO Model Server OVMS と互換性のある ResNet-50 モデルを含む Containerfile を使用します。OVMS では通常、追加のハードウェアアクセラレーターは必要ありません。
手順
互換性のあるモデルとモデルサーバーを備えた Containerfile を準備します。
OVMS で使用される ResNet-50 モデルを含む Containerfile の例
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest RUN microdnf install -y wget && microdnf clean all RUN mkdir -p /models/1 && chmod -R 755 /models/1 RUN wget -q -P /models/1 \ https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin \ https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml次のコマンドを実行して、
IMAGE_REF環境変数を設定し、プロセスを簡素化します。$ IMAGE_REF=<ovms-resnet50:test>1 - 1
<ovms-resnet50:test>は、イメージ参照の名前に置き換えます。この例では、<repo:tag>形式が使用されています。イメージ参照名はユースケースに固有です。
次のコマンドを実行して Containerfile をビルドします。
$ sudo podman build -t $IMAGE_REF1 - 1
- CRI-O と Podman はストレージを共有するため、イメージをルートのコンテナーストレージの一部にして MicroShift で使用できるようにするには、
sudoを使用する必要があります。
出力例
STEP 1/4: FROM registry.access.redhat.com/ubi9/ubi-minimal:latest Trying to pull registry.access.redhat.com/ubi9/ubi-minimal:latest... Getting image source signatures Checking if image destination supports signatures Copying blob 533b69cfd644 done | Copying blob 863e9a7e2102 done | Copying config 098048e6f9 done | Writing manifest to image destination Storing signatures STEP 2/4: RUN microdnf install -y wget && microdnf clean all << SNIP >> --> 4c74352ad42e STEP 3/4: RUN mkdir -p /models/1 && chmod -R 755 /models/1 --> bfd31acb1e81 STEP 4/4: RUN wget -q -P /models/1 https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.bin https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/2/resnet50-binary-0001/FP32-INT1/resnet50-binary-0001.xml COMMIT ovms-resnet50:test --> 375b265c1c4b Successfully tagged localhost/ovms-resnet50:test 375b265c1c4bc6f0a059c8739fb2b3a46e1b563728f6d9c51f26f29bb2c87オプション: 次のコマンドを実行して、Containerfile をレジストリーにプッシュします。
$ sudo podman push $IMAGE_REF重要オフラインで使用する場合は、
latest以外のタグを含めます。latestタグが使用されている場合、モデルを取得してセットアップするコンテナーは、imagePullPolicy:パラメーターがAlwaysに設定されて構成されており、ローカルのイメージは無視されます。latest以外のタグを使用する場合、imagePullPolicy:パラメーターはIfNotPresentに設定されます。
検証
次のコマンドを実行して、イメージが存在することを確認します。
$ sudo podman images ovms-resnet50出力例
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ovms-resnet50 test 375b265c1c4b 3 minutes ago 136 MB
次のステップ
- モデルサービングランタイムを設定します。
- AI モデルが推論の準備ができていることを確認します。
- モデルサーバーに対してリクエストを実行します。