Elastic Algorithm Service (EAS) が提供する公式イメージがビジネスや環境の要件を満たさない場合、カスタムイメージを使用して完全なランタイム環境をパッケージ化できます。この方法は、モデルサービスをデプロイするための柔軟で信頼性の高い方法を提供します。
イメージリポジトリの計画
サービスをデプロイする際、EAS はイメージリポジトリからイメージをプルします。イメージの保存には、Alibaba Cloud の Container Registry (ACR) の使用を推奨します。VPC アドレスを使用してイメージをプルすると、パフォーマンスとセキュリティが向上します。
パブリックネットワーク経由でのイメージのプルは低速であり、セキュリティリスクを伴います。この方法は推奨されません。
ACR Personal Edition
ACR Personal Edition は無料ですが、単一リージョン内でのみアクティベートして使用できます。リージョンをまたいでイメージをプルするには、パブリックネットワークアドレスを使用する必要があります。
テストシナリオでのみ ACR Personal Edition を使用することを推奨します。ACR Personal Edition インスタンスが EAS サービスと同じリージョンにあることを確認してください。
ACR Enterprise Edition
ACR Enterprise Edition は、強化されたセキュリティ、パフォーマンス、およびグローバル同期機能を提供します。これにより、EAS サービスは、同一リージョン内およびリージョン間で、内部ネットワークを介して安全かつ迅速にイメージをプルできます。
本番環境での使用を推奨します。
自己構築のイメージリポジトリ
Alibaba Cloud VPC 内で Harbor などの自己構築のイメージリポジトリを使用する場合、リポジトリはその VPC 内からのみアクセス可能です。ACR Enterprise Edition と同様に、イメージリポジトリと EAS サービスが同じ VPC 内にあることを保証するために、EAS サービスに VPC を設定する必要があります。
イメージリポジトリの身分認証
認証が必要なプライベートイメージリポジトリを使用する場合、サービスデプロイ時にユーザー名とパスワードを提供する必要があります。
JSON 構成ファイルで、dockerAuth パラメーターを使用して認証情報を指定します。値には、username:password の Base64 エンコード文字列を設定します。
たとえば、abcd:abcde12345 の場合、コマンド echo -n "abcd:abcde12345" | base64 を実行します。コマンドは YWJjZDphYmNkZTEy**** を返します。dockerAuth パラメーターにこの値を使用します。
{"dockerAuth": "YWJjZDphYmNkZTEy****"}同一リージョンかつ同一の Alibaba Cloud アカウント配下にある ACR イメージリポジトリを使用する場合、EAS はパスワードなしでイメージをプルできます。ユーザー名やパスワードを入力する必要はありません。
クイックスタート:カスタムイメージの作成とデプロイ
このセクションでは、Alibaba Cloud ECS インスタンス上で Gunicorn と Flask に基づく本番環境レベルの Web サービスイメージをビルドし、そのイメージを ACR イメージリポジトリにプッシュし、EAS オンラインサービスとしてデプロイする方法について説明します。
ステップ 1:事前準備
開始する前に、以下の環境とリソースが準備できていることを確認してください。
Virtual Private Cloud (VPC):EAS サービス、ECS インスタンス、および ACR イメージリポジトリは、イメージのプッシュとプルの安定性とセキュリティを確保するために、VPC を介して通信する必要があります。
Container Registry (ACR):ACR はカスタムイメージの保存と管理に使用されます。ACR Enterprise Edition インスタンスを準備し、必要な名前空間とイメージリポジトリを作成する方法の詳細については、「Enterprise Edition インスタンスを使用したイメージのプッシュとプル」をご参照ください。
開発環境:以下の構成で ECS インスタンスを作成し、イメージをビルドできます。
インスタンスタイプ:ecs.u1-c1m2.large
イメージ:Alibaba Cloud Linux 3.2104 LTS 64 ビット
拡張機能:Docker Community Edition
ネットワーク:選択した VPC を ACR Enterprise インスタンスのアクセス制御設定に追加する必要があります。追加しない場合、ACR イメージリポジトリにイメージをプッシュできません。詳細については、「VPC 経由での ACR インスタンスへのアクセス制御の設定」をご参照ください。
説明ローカルまたは他の開発環境も使用できます。
ローカル開発環境:Docker をインストールして実行し、ローカルでイメージをビルドできます。
DSW 開発環境の使用:DSW インスタンスの [操作] 列で、Create Image をクリックします。この操作により Docker イメージがビルドされ、Alibaba Cloud Container Registry (ACR) に保存されます。デプロイ時に Custom Image を選択し、ドロップダウンリストからイメージを選択します。詳細については、「DSW インスタンスイメージの作成」をご参照ください。
ステップ 2:アプリケーションファイルの準備
my-app などのプロジェクトフォルダを作成し、以下の 3 つのファイルをフォルダに追加します。
requirements.txt(アプリケーションの依存関係)flask gunicornapp.py(Web アプリケーションコード)from flask import Flask app = Flask(__name__) @app.route('/hello/model') def hello_world(): # ここでモデルの推論や他のビジネスロジックを統合できます。 return 'Hello World from Gunicorn!' # 注意:app.run() は不要です。アプリケーションは Gunicorn によって起動されます。
Dockerfile(イメージビルド命令)# 1. ベースとして軽量の公式 Python イメージを使用します。 FROM python:3.9-slim # 2. 作業ディレクトリを設定します。 WORKDIR /app # 3. 依存関係ファイルをコピーしてインストールします。これにより、Docker のキャッシュ機構を利用して後続のビルドを高速化します。 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 4. アプリケーションコードをコピーします。 COPY app.py . # 5. サービスポートを宣言します。 EXPOSE 8000 # 6. デフォルトのコンテナー起動コマンドを定義します。これは EAS コンソールの「実行コマンド」で上書きできます。 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]
ステップ 3:イメージのビルドとプッシュ
ターミナルを開き、プロジェクトフォルダ (
my-app) に移動します。ACR インスタンスにログインします。コマンド内のプレースホルダーを実際の情報に置き換えてください。
# 例:docker login --username=your_user my-registry.cn-hangzhou.aliyuncs.com docker login --username=<username> <ACR_repository_domain_name>Docker イメージをビルドし、完全なタグを付けます。
# 例:docker build -t my-registry.cn-hangzhou.aliyuncs.com/my-namespace/flask-app:v1 . docker build -t <ACR_repository_domain_name>/<namespace>/<image_repository_name>:<version_number> .ビルドしたイメージを ACR にプッシュします。
# 例:docker push registry.cn-hangzhou.aliyuncs.com/my-namespace/flask-app:v1 docker push <ACR_repository_domain_name>/<namespace>/<image_repository_name>:<version_number>
ステップ 4:サービスのデプロイ
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
Deploy Service をクリックし、 を選択します。
以下の主要なパラメーターを設定します。
Deployment Method:Image-based Deployment を選択します。
Image Configuration: Image Address を選択し、前のステップでプッシュした完全なイメージアドレスを入力します。
この例では、同一の Alibaba Cloud アカウント配下の ACR リポジトリを使用しているため、EAS はパスワードなしでイメージをプルできます。ユーザー名とパスワードを提供する必要はありません。
Command to Run:
gunicorn -w 4 -b 0.0.0.0:8000 app:app注意:EAS コンソールで指定された
[実行コマンド]は、Dockerfile のCMD命令を上書きPort Number 8000。
Deployment:この例では、Public Resources から
ecs.c6.largeなどの CPU リソースを選択します。VPC:VPC、vSwitch、およびセキュリティグループを選択します。
ここで選択した VPC が ACR インスタンスのアクセス制御リストに追加されていることを確認してください。追加されていない場合、ネットワークの問題でイメージのプルが失敗します。一般的なエラーは
ImagePullBackOffです。
[デプロイ] をクリックします。サービスステータスが Running に変わると、サービスはデプロイされています。
ステップ 5:サービスのテスト
サービスがデプロイされた後、エンドポイントとトークンを取得します。次のコマンドを使用して Flask サービスをテストします。
# <endpoint> と <token> を実際のサービスエンドポイントとトークンに置き換えます。
curl <endpoint>/hello/model -H "Authorization: <token>"コマンドが Hello World from Gunicorn! を返した場合、サービスは正常にデプロイされ、アクセス可能です。
サービスの呼び出しに関する詳細については、「サービスの呼び出しメソッド」をご参照ください。
基本概念と制限事項
ネットワークの制限事項:EAS サービスは VPC アドレスを介して内部ネットワークリソースにアクセスします。通常、サービスに VPC を設定する必要があります。
pipを使用してパブリックソースから依存関係をインストールする、外部 API を呼び出す、またはパブリックネットワーク経由でイメージをプルするなど、パブリックネットワークリソースにアクセスするには、VPC に NAT Gateway を設定する必要もあります。詳細については、「EAS サービスがパブリックネットワークまたは内部リソースにアクセスできるようにする」をご参照ください。コストに関するヒント:NAT Gateway は有料サービスであり、追加料金が発生します。
ポートの制限事項:EAS サービスエンジンはポート
8080と9090を占有します。アプリケーションのリスニングポートは、これら 2 つのポートのいずれにもできません。そうしないと、ポートの競合によりサービスの起動に失敗します。サイドカーインジェクション:認証とモニタリングを実装するために、EAS はサイドカーモードを使用してサービスインスタンスにプロキシコンテナーを注入します。このプロキシは透過的ですが、少量のリソースを消費します。プロキシは、外部リクエストを設定されたサービスポートに安全に転送する役割を担います。
API プロトコルのサポート:イメージベースのデプロイでは、HTTP、WebSocket、および gRPC (HTTP/2) を介してイメージから API サービスを提供できます。
本番環境に適用する際の推奨事項
イメージとモデルの分離:コードとモデルファイルを分離することを推奨します。コードをイメージにパッケージ化します。モデルは Object Storage Service (OSS) または File Storage NAS に保存します。EAS のデプロイページで、ストレージマウント機能を使用してモデルをコンテナーにマウントできます。この方法により、サービスの更新やスケールアウト時のイメージのプル時間が大幅に短縮されます。
内部ネットワーク経由でのイメージのプル:セキュリティとパフォーマンスのために、サービスに VPC を設定することを推奨します。これにより、サービスは VPC アドレスを使用して ACR からイメージをプルできます。
AI アセットとしてのイメージの登録:カスタムイメージが他のさまざまなシナリオで使用できる場合は、PAI AI アセットのイメージ機能を使用することを推奨します。これにより、イメージを AI アセットとして一元管理できます。
ヘルスチェックの設定:サービスにヘルスチェックを設定することを推奨します。EAS はヘルスチェックを使用して、異常なインスタンスを自動的に再起動し、サービスの安定性を確保します。詳細については、「ヘルスチェック」をご参照ください。
自動スケーリングの有効化:ビジネスのワークロードが大幅に変動する場合は、水平自動スケーリング機能を有効にすることを推奨します。この機能は、弾力的かつコスト効率の高い方法でトラフィックの変動に対応するのに役立ちます。
FAQ
Q:なぜ `ImagePullBackOff` エラーでイメージのプルが失敗するのですか?
原因 1:ネットワーク接続の失敗。これは最も一般的な原因です。EAS サービスに設定された VPC が ACR インスタンスのアクセス制御ホワイトリストに追加されているかどうかを確認してください。リージョンをまたいで作業する場合は、CEN を介して VPC を接続する必要があります。詳細については、「別のリージョンまたは IDC から ACR Enterprise Edition インスタンスにアクセスする」をご参照ください。パブリックネットワーク経由でイメージをプルする場合は、パブリックネットワークアクセスが可能な VPC が EAS に設定されていること、および ACR のパブリックアクセスを有効にしていることを確認してください。
原因 2:認証の失敗。認証が必要なプライベートイメージリポジトリ (ご自身のアカウント配下の ACR リポジトリではない) を使用している場合は、[イメージ設定] セクションで入力した認証情報が正しいかどうかを確認してください。
原因 3:イメージが見つからない。イメージアドレス、名前空間、およびバージョン番号 (タグ) が正しいかどうかを確認してください。また、イメージがリポジトリに正常にプッシュされていることを確認してください。
原因 4:システムディスクの容量不足。この問題を解決するには、システムディスクを拡張できます。
その他の問題に関する詳細については、「EAS よくある質問」をご参照ください。