EasyAnimate は、Alibaba Cloud の Platform for AI (PAI) が Diffusion Transformer (DiT) アーキテクチャに基づいて開発した動画生成フレームワークです。テキストや画像から高解像度 (HD) の長編動画を生成するための完全なソリューションを提供し、パーソナライズのためのモデルのファインチューニング機能も備えています。
ソリューション
|
ソリューション |
利点とユースケース |
課金 |
|
チュートリアルとコードが組み込まれたクラウドベースの統合開発環境 (IDE) を提供します。このソリューションは、モデルを深く探求したい、またはカスタム開発を行いたいユーザーに最適です。 |
このチュートリアルでは、パブリックリソースを使用し、従量課金で請求される DSW インスタンスを作成します。詳細については、「DSW の課金」をご参照ください。 |
|
|
環境設定は不要です。ワンクリックでモデルをデプロイまたはファインチューニングし、WebUI または API を介して呼び出すことができます。このソリューションは、迅速な検証やアプリケーション統合に最適です。 |
このチュートリアルでは、モデルのデプロイ用に EAS サービスを、モデルのファインチューニング用に DLC ジョブを作成します。どちらもパブリックリソースを使用し、従量課金で請求されます。詳細については、「DLC の課金」および「EAS の課金」をご参照ください。 |
ソリューション 1:DSW を使用した動画の生成
ステップ 1:DSW インスタンスの作成
-
PAI コンソールにログインし、リージョンを選択します。左側のメニューで ワークスペースリスト をクリックし、対象のワークスペースを探してクリックします。
-
左側のメニューで、モデル開発とトレーニング > DSW-Notebook モデリング をクリックして DSW ページに移動します。
-
インスタンスの作成 をクリックし、次の主要なパラメーターを設定します。その他のパラメーターはデフォルト値のままにします。
パラメーター
説明
インスタンス名
例:AIGC_test_01。
リソースタイプ
パブリックリソース を選択します。
リソース仕様
[GPU Specs] で、
ecs.gn7i-c8g1.2xlargeまたは他の A10 インスタンスタイプを選択します。イメージ
Alibaba Cloud イメージ を選択し、
easyanimate:1.1.5-pytorch2.2.0-gpu-py310-cu118-ubuntu22.04を検索して選択します。 -
OK をクリックしてインスタンスを作成し、インスタンスのステータスが 実行中 に変わるのを待ちます。
ステップ 2:EasyAnimate のチュートリアルとモデルのダウンロード
-
対象の DSW インスタンスの 操作 列で、開く をクリックして開発環境を開きます。
-
ノートブック タブで [Launcher] ページを開き、[DSW Gallery] をクリックします。
-
DSW Gallery で [AI Video Generation with EasyAnimate (V5)] を検索します。[Open in DSW] をクリックして、このチュートリアルに必要なリソースを DSW インスタンスにダウンロードします。
EasyAnimate の AI 動画生成の例には、複数のバージョンがあります。このチュートリアルでは V5 を例として使用します。
-
EasyAnimate のコードとモデルをダウンロードしてインストールします。
EasyAnimate のチュートリアルファイルで、
をクリックして、[Function Definition]、[Download Code]、[Download Model] というタイトルのセルを順に実行します。
ステップ 3:WebUI の起動と動画の生成
-
をクリックして [Launch UI] というタイトルのセルを実行し、WebUI サービスを開始します。 -
生成されたリンクをクリックして WebUI を開きます。
!python app.py /mnt/workspace/demos/easyanimate_v5_1/EasyAnimate/easyanimate/ui/ui.py:892: GradioUnusedKwargWarning: You have unused kwarg parameters in Video, please remove them: {'sources': 'upload'} control_video = gr.Video() /usr/local/lib/python3.10/dist-packages/gradio/utils.py:842: UserWarning: Expected 2 arguments for function <function ui.<locals>.upload_generation_method at 0x7fe5b79b79a0>, received 1. warnings.warn() /usr/local/lib/python3.10/dist-packages/gradio/utils.py:846: UserWarning: Expected at least 2 arguments for function ui.<locals>.upload_generation_method at 0x7fe5b79b79a0>, received 1. warnings.warn() Running on local URL: http://0.0.0.0:7860 IMPORTANT: You are using gradio version 3.41.2, however version 4.44.1 is available, please upgrade. -------- To create a public link, set `share=True` in `launch()`. -
WebUI で、事前学習済みモデルのパスを選択し、必要に応じて他のパラメーターを設定します。
[Pretrained Model Path] ドロップダウンリストから、
/mnt/workspace/demos/easyanimate_v5/EasyAnimate/models/Diffusion_Transformer/EasyAnimateV5-12b-zh-InP/を選択します。 -
[Generate] をクリックします。約 5 分後、画面右側で生成された動画を表示またはダウンロードできます。
ソリューション 2:モデルギャラリーを使用した動画の生成
ステップ 1:事前学習済みモデルのデプロイ
-
PAI コンソールにログインし、リージョンを選択します。左側のメニューで ワークスペースリスト をクリックし、対象のワークスペース名を探してクリックします。
-
左側のメニューで、クイックスタート > [Model Gallery] をクリックします。[EasyAnimate HD Long Video Generation Model] を検索し、デプロイメント をクリックし、デフォルト設定のままデプロイを確定します。サービスのステータスが 実行中 に変わると、モデルは正常にデプロイされています。
ステップ 2:WebUI または API を使用した動画の生成
モデルをデプロイした後、WebUI または API を介してサービスを呼び出すことで動画を生成できます。
後でデプロイジョブの詳細を表示するには、左側のメニューで [Model Gallery] > タスク管理 > タスクのデプロイメント をクリックし、サービス名 をクリックします。
WebUI
-
サービスの詳細 ページで、WEB アプリケーションの表示 をクリックします。
-
WebUI で、事前学習済みモデルのパスを選択し、必要に応じて他のパラメーターを設定します。
たとえば、[Pretrained Model Path] ドロップダウンリストで、
/mnt/models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512/を選択します。 -
[Generate] をクリックします。約 5 分後、画面右側で生成された動画を表示またはダウンロードできます。
生成が完了すると、右下の [Generation Info] エリアに [Success] と表示され、動画が正常に生成されたことを示します。
API
-
サービスの詳細 ページの リソースの詳細 セクションで、エンドポイント情報の表示 をクリックしてサービスエンドポイントとトークンを取得します。
-
サービスを呼び出して動画を生成します。次の Python コードはリクエストの例です。
import os import requests import json import base64 from typing import Dict, Any class EasyAnimateClient: """ EasyAnimate EAS サービス用の API クライアントです。 """ def __init__(self, service_url: str, token: str): if not service_url or not token: raise ValueError("`service_url` と `token` パラメーターは空にできません。") self.base_url = service_url.rstrip('/') self.headers = { 'Content-Type': 'application/json', 'Authorization': token } def update_model(self, model_path: str, edition: str = "v3", timeout: int = 300) -> Dict[str, Any]: """ 指定されたモデルのバージョンとパスを更新して読み込みます。 Args: model_path: サービス内のモデルへのパス。例:"/mnt/models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512"。 edition: モデルのバージョン。デフォルトは "v3" です。 timeout: リクエストのタイムアウト (秒単位)。モデルの読み込みには時間がかかる場合があるため、長めのタイムアウトを推奨します。 """ # 1. バージョンを更新します。 requests.post( f"{self.base_url}/easyanimate/update_edition", headers=self.headers, json={"edition": edition}, timeout=timeout ).raise_for_status() # 2. モデルパスを更新し、読み込みを待ちます。 print(f"モデルを読み込むためのリクエストを送信中: {model_path}") response = requests.post( f"{self.base_url}/easyanimate/update_diffusion_transformer", headers=self.headers, json={"diffusion_transformer_path": model_path}, timeout=15000 ) response.raise_for_status() return response.json() def generate_video(self, prompt_textbox: str, **kwargs) -> bytes: """ プロンプトに基づいて動画を生成します。 Args: prompt_textbox: ポジティブプロンプト。 **kwargs: その他のオプションパラメーター。以下のパラメーター説明表をご参照ください。 Returns: MP4 形式の動画のバイナリデータ。 """ payload = { "prompt_textbox": prompt_textbox, "negative_prompt_textbox": kwargs.get("negative_prompt", "The video is not of a high quality, it has a low resolution..."), "width_slider": kwargs.get("width_slider", 672), "height_slider": kwargs.get("height_slider", 384), "length_slider": kwargs.get("length_slider", 144), "sample_step_slider": kwargs.get("sample_step_slider", 30), "cfg_scale_slider": kwargs.get("cfg_scale_slider", 6.0), "seed_textbox": kwargs.get("seed_textbox", 43), "sampler_dropdown": kwargs.get("sampler_dropdown", "Euler"), "generation_method": "Video Generation", "is_image": False, "lora_alpha_slider": 0.55, "lora_model_path": "none", "base_model_path": "none", "motion_module_path": "none" } response = requests.post( f"{self.base_url}/easyanimate/infer_forward", headers=self.headers, json=payload, timeout=1500 ) response.raise_for_status() result = response.json() if "base64_encoding" not in result: raise ValueError(f"無効な API レスポンス形式: {result}") return base64.b64decode(result["base64_encoding"]) # --- 使用例 --- if __name__ == "__main__": try: # 1. サービス情報を設定します。プレースホルダーを実際のサービスエンドポイントとトークンに置き換えてください。環境変数として設定することを推奨します。 EAS_URL = "<eas-service-url>" EAS_TOKEN = "<eas-service-token>" # 2. クライアントを作成します。 client = EasyAnimateClient(service_url=EAS_URL, token=EAS_TOKEN) # 3. モデルを読み込みます。デフォルトでは、サービスのデプロイ後にモデルは読み込まれません。生成リクエストを送信する前に、`update_model` を少なくとも 1 回呼び出して使用するモデルを指定する必要があります。後でモデルを切り替えるには、このメソッドを再度呼び出します。 client.update_model(model_path="/mnt/models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512") # 4. 動画を生成します。 video_bytes = client.generate_video( prompt_textbox="A beautiful cat playing in a sunny garden, high quality, detailed", width_slider=672, height_slider=384, length_slider=72, sample_step_slider=20 ) # 5. 動画ファイルを保存します。 with open("api_generated_video.mp4", "wb") as f: f.write(video_bytes) print("動画が api_generated_video.mp4 として正常に保存されました") except requests.RequestException as e: print(f"ネットワークリクエストエラー: {e}") except (ValueError, KeyError) as e: print(f"データまたはパラメーターのエラー: {e}") except Exception as e: print(f"不明なエラーが発生しました: {e}")
ステップ 3: (オプション) モデルのファインチューニング
カスタムデータセットでモデルをファインチューニングして、特定のスタイルやコンテンツの動画を生成できます。次の手順に従います。
-
PAI コンソールにログインします。左側のメニューで ワークスペースリスト をクリックし、対象のワークスペース名を探してクリックします。
-
左側のメニューで、クイックスタート > [Model Gallery] をクリックします。
-
モデルギャラリーで [EasyAnimate HD Long Video Generation Model] を検索し、トレーニング をクリックして設定ページを開きます。
-
リソースのソース を パブリックリソース に設定します。インスタンスタイプ には、A10 以上の GPU を搭載したインスタンスを選択します。必要に応じてハイパーパラメーターを設定し、その他のパラメーターはデフォルト値のままにします。
カスタムデータセットでモデルをファインチューニングするには、以下を参照してください。
-
トレーニング > 確認 をクリックしてトレーニングタスクを作成します。このチュートリアルの設定では、トレーニングプロセスに約 40 分かかります。タスクのステータスが 成功 に変わると、モデルトレーニングは完了です。
後でトレーニングタスクの詳細を表示するには、左側のメニューで [Model Gallery] > タスク管理 > トレーニングジョブ をクリックし、タスク名をクリックします。
-
右上隅にある デプロイメント をクリックして、ファインチューニングされたモデルをデプロイします。ステータスが 実行中 に変わると、デプロイは完了です。
-
サービスの詳細 ページで、ページ上部の [View Web App] をクリックします。
後でサービスの詳細を表示するには、左側のメニューで [Model Gallery] > タスク管理 > タスクのデプロイメント をクリックし、サービス名 をクリックします。
-
WebUI で、トレーニング済みの LoRA モデルを選択して動画を生成します。API の使用法については、「ステップ 2」をご参照ください。
[Model checkpoints] セクションで、[Select LoRA model] ドロップダウンリストから LoRA モデルを選択し、[LoRA alpha] スライダーを使用してその重みを設定します。
本番環境に関する推奨事項
-
コストを節約するためのインスタンスまたはサービスの停止:このチュートリアルでは、パブリックリソースを使用して DSW インスタンスと EAS モデルサービスを作成します。追加の課金を避けるため、不要になったインスタンスやサービスは停止または削除してください。
-
[Interactive Modeling (DSW)] ページで、対象のインスタンスを探します。[Actions] 列で [Stop] をクリックして実行中のインスタンスを停止するか、[Delete] をクリックして停止したインスタンスを削除します。
-
[Model Gallery] ページの [Job Management] タブをクリックし、[Deployment Jobs] サブタブをクリックします。対象のサービスを探し、[Actions] 列の [Stop] または [Delete] をクリックします。
-
-
本番デプロイには EAS を使用:本番環境では、ソリューション 2 を使用してモデルを EAS にワンクリックでデプロイすることを推奨します。ソリューション 1 を使用した場合は、カスタムランタイムイメージを作成することでモデルを EAS にデプロイできます。詳細については、「オンラインサービスとしてのモデルのデプロイ」をご参照ください。
EAS は、本番ワークロード向けに次の機能を提供します。
-
EAS のストレステスト機能を使用して、サービスエンドポイントがサポートできる同時実行レベルをテストします。
-
EAS のオートスケーリング機能を使用して、トラフィックの増減に対応してインスタンスを自動的にスケーリングし、安定したサービス運用を保証します。
-
EAS のログの監視とアラート機能を使用して、サービスの健全性をリアルタイムで追跡し、システムの安定性とセキュリティを向上させます。
-
関連ドキュメント
EAS は、ComfyUI および Stable Video Diffusion モデルに基づいて AI 動画生成サービスをワンクリックでデプロイするためのシナリオベースのデプロイ方法を提供します。詳細については、「AI 動画生成 - ComfyUI デプロイ」をご参照ください。