Data Science Workshop (DSW) に組み込まれている Notebook または VSCode を使用して、クラウドでディープラーニングモデルを開発、トレーニング、デプロイします。このトピックでは、MNIST 手書き数字認識を例に、完全なワークフローを説明します。
MNIST 手書き数字認識は、ディープラーニングの典型的な入門タスクです。その目的は、10 種類の手書き数字 (0〜9) を認識するモデルをトレーニングすることです。
前提条件
Alibaba Cloud アカウントで PAI をアクティブ化し、ワークスペースが作成されている必要があります。PAI をまだアクティブ化していない場合は、PAI コンソールにアクセスし、ページの左上隅で対象リージョンを選択して、ワンクリックで承認と製品のアクティブ化を完了してください。
課金
このトピックでは、パブリックリソースグループを使用して DSW インスタンスと EAS モデルサービスを作成します。これらは従量課金制で課金されます。課金の詳細については、「DSW の課金」と「EAS の課金」をご参照ください。
DSW インスタンスの作成
-
DSW ページに移動します。
-
PAI コンソールにアクセスします。
-
ページの左上隅で対象リージョンを選択します。
-
左側メニューで ワークスペースリスト をクリックし、対象のワークスペースに移動します。
-
左側メニューで、 を選択します。
-
-
インスタンスの設定 ウィザードページで、次のパラメーターを設定し、他のパラメーターはデフォルト設定のままにします。
-
リソースタイプ: パブリックリソース (従量課金) を選択します。
-
リソース仕様:
ecs.gn7i-c8g1.2xlargeを選択します。このインスタンスタイプが在庫切れの場合は、別の GPU インスタンスを選択できます。
-
イメージの設定: Alibaba Cloud イメージ を選択し、イメージ
modelscope:1.26.0-pytorch2.3.0-gpu-py311-cu121-ubuntu22.04を検索します。環境の互換性の問題を回避するため、同じイメージを使用することを推奨します。
-
ストレージのマウント: モデル開発ファイルを永続化します。このトピックでは、Object Storage Service (OSS) を使用します。[OSS] をクリックし、
アイコンをクリックして [Bucket] を選択し、ディレクトリ (例:pai_test) を作成します。現在のリージョンで利用可能なバケットがない場合は、次の手順でバケットを作成します:
-
[Uri]:
oss://**********oss-cn-hangzhou-internal.aliyuncs.com/pai_test/ -
マウントパス:
/mnt/data/
-
-
-
OK をクリックしてインスタンスを作成します。
インスタンスの起動に失敗した場合は、「DSW インスタンスの作成」でトラブルシューティングをご参照ください。
DSW でのモデル開発
-
インスタンスリストで 開く をクリックして DSW 開発環境に移動します。ランチャーページで [JupyterLab] をクリックして Notebook 開発環境を作成します。
-
モデルコードを記述します。MNIST トレーニングコードが提供されています。mnist.ipynb をダウンロードし、Notebook の左上隅にある
アイコンをクリックしてファイルをアップロードします。
-
モデルをトレーニングします。
mnist.ipynbを開き、トレーニングコードのセルを見つけて
アイコンをクリックして実行します。コードは自動的に MNIST データセットを dataSetディレクトリにダウンロードし、トレーニング済みモデルをoutputディレクトリに保存します。トレーニングには約 10 分かかります。

トレーニングプロセスでは、汎化能力を示す検証セットでの精度が出力されます。この例では、検証セットの精度は 98% です。次のステップに進むことができます。
-
トレーニング曲線を表示します。次のセルを実行し、TensorBoard の URL
http://localhost:6006/をクリックします。
TensorBoard には、train_loss (トレーニング損失) と validation_loss (検証損失) の曲線が表示されます。

曲線を確認した後、セルの
アイコンをクリックして TensorBoard を停止します。TensorBoard を停止しないと、後続のセルを実行できません。 -
モデルをテストします。次のセルを実行して、20 個のテスト画像と、その真のラベルおよびモデルの予測を表示します。

出力例:

-
モデルファイルを永続化します。このトピックでは、パブリックリソースグループを使用して DSW インスタンスを作成し、ファイルは無料のクラウドディスクに保存されます。インスタンスが 15 日を超えて停止されると、クラウドディスクのコンテンツは自動的にクリアされます。モデルファイルを OSS にコピーして、後続の PAI-EAS デプロイメントで使用します。

OSS コンソールにアクセスして、コピーされたファイルを表示します:

モデル開発が完了したら、モデルをオンラインサービスとしてデプロイできます。「EAS を使用したモデルサービスのデプロイ」をご参照ください。
このトピックでは、パブリックリソースを使用して DSW インスタンスを作成し、従量課金制で課金されます。インスタンスを使用しない場合は、インスタンスリストページからインスタンスを停止または削除して、継続的な課金を回避してください。
EAS を使用したモデルサービスのデプロイ
Elastic Algorithm Service (EAS) を使用すると、トレーニング済みのモデルをオンライン推論サービスまたは AI Web アプリケーションとしてデプロイできます。EAS は異種リソースをサポートし、オートスケーリング、ワンクリック負荷テスト、カナリアリリース、リアルタイムモニタリングなどの機能を統合することで、高同時実行シナリオにおいても低コストでサービスの安定性を確保します。
-
Web サービスコードを記述し、OSS にコピーします。Web サービスコードとコピーコマンドが提供されています。次のセルを実行します。

-
(オプション) DSW で Web サービスを検証します。次のセルを実行して、依存関係をインストールし、サービスを開始します。

サービスをテストします。ランチャーページで VSCode をクリックして開発環境に移動します。左側のペインで
request_web.pyをクリックし、右クリックして [Run Python] > [Run Python File in Terminal] を選択してコードを実行します。次の結果が返されます:{"prediction": 7}説明DSW の Web サービスにインターネット経由でアクセスするには、VPC、NAT ゲートウェイ、および EIP を設定する必要があります。詳細については、「インスタンス内のサービスにパブリックネットワーク経由でアクセスする」をご参照ください。
-
EAS サービスを作成します。PAI コンソールの左側メニューで、Elastic Algorithm Service (EAS) > サービスのデプロイメント > カスタムデプロイメント をクリックします。
次のパラメーターを設定し、他のパラメーターはデフォルト設定のままにします:
-
推論アクセラレーション: イメージデプロイメント
-
イメージ設定: イメージアドレス を選択し、DSW で使用したイメージアドレスを貼り付けます。
DSW では、このイメージがモデルコードを正常に実行できることを検証済みです。デプロイに同じイメージを使用することで、環境の問題を回避できます。

-
ストレージのマウント: モデルファイルと Web サービスコードは OSS にコピーされています。[OSS] をクリックし、対応するパスを選択します。
-
[Uri]: oss://*****/pai_test/
-
マウントパス: /mnt/data/
-
-
コマンドの実行:
web.pyは/mnt/data/にマウントされています。パスを調整してください。実行コマンドは次のとおりです:python /mnt/data/web.py -
ポート番号:
web.pyで使用されるポート番号9000を入力します。 -
サードパーティライブラリの設定: 選択したイメージには bottle ライブラリが含まれていません。ここに
bottleを追加します。 -
リソースタイプ: パブリックリソース を選択します。リソース仕様 には、
ecs.gn7i-c8g1.2xlargeを選択します。 -
システムディスクの設定: 20 GB に設定します。
イメージはサイズが大きいです。システムディスクの容量が不足すると、インスタンスの起動に失敗します。20 GB 以上に設定することを推奨します。
デプロイメント をクリックしてサービスを作成します。サービスの作成には約 5 分かかります。ステータスが 実行中 に変わると、サービスはデプロイされています。
-
-
呼び出し情報を取得します。サービス詳細ページで エンドポイント情報の表示 をクリックして、インターネットエンドポイント と トークン を取得します。
-
サービスを呼び出します。次のコードの インターネットエンドポイント と トークン を実際の値に置き換えてから、コードを実行します。
import requests """ テスト画像の URL: ラベルは 7 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg ラベルは 2 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_2_No_1.jpg ラベルは 1 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_1_No_2.jpg ラベルは 0 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_0_No_3.jpg ラベルは 4 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_4_No_4.jpg ラベルは 9 http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_9_No_5.jpg """ image_url = 'http://aliyun-document-review.oss-cn-beijing.aliyuncs.com/dsw_files/mnist_label_7_No_0.jpg' # 画像をバイナリデータとしてダウンロードします img_response = requests.get(image_url, timeout=10) # ステータスコードに基づいてリクエストが成功したかどうかを自動的にチェックします img_response.raise_for_status() img_bytes = img_response.content # ヘッダーの "" を実際のトークンに置き換えます # 本番環境では、機密情報の漏洩を防ぐために、トークンを環境変数として設定することを推奨します。 # 環境変数の設定方法の詳細については、https://www.alibabacloud.com/help/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems をご参照ください。 headers = {"Authorization": ""} # バイナリデータを POST リクエストのボディとしてモデルサービスに送信します resp = requests.post('Call URL/predict_image', data=img_bytes, headers=headers) print(resp.json())結果:
{"prediction": 7}
このトピックでは、パブリックリソースを使用して EAS サービスを作成し、従量課金制で課金されます。サービスを使用しない場合は、サービスリストページからサービスを停止または削除して、継続的な課金を回避してください。
関連ドキュメント
-
DSW の起動失敗のトラブルシューティングについては、「DSW インスタンスの作成」をご参照ください。
-
DSW の課金については、「DSW の課金」をご参照ください。
-
DSW のコア機能については、「DSW の概要」をご参照ください。
-
DSW の Web サービスにインターネット経由でアクセスする方法については、「インスタンス内のサービスにパブリックネットワーク経由でアクセスする」をご参照ください。
-
EAS のコア機能については、「EAS の概要」をご参照ください。
