すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:EAS を使用した大規模言語モデルのデプロイ

最終更新日:Oct 17, 2025

大規模言語モデル (LLM) を手動でデプロイするには、複雑な環境設定、パフォーマンスチューニング、コスト管理が伴います。Elastic Algorithm Service (EAS) は、DeepSeek や Qwen などの一般的なモデルをワンクリックでデプロイできる、ワンストップの LLM デプロイソリューションを提供します。

ステップ 1: LLM サービスのデプロイ

このトピックでは、パブリックモデルから Qwen3-8B をデプロイする方法を例に説明します。

説明

パブリックモデルとは、デプロイテンプレートがあらかじめ設定されたモデルで、モデルファイルを準備することなくワンクリックでデプロイできます。カスタムモデルを選択する場合は、Object Storage Service (OSS) などのサービスからモデルファイルをマウントする必要があります。

  1. PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。

  2. [Inference Service] タブで [Deploy Service] をクリックし、[Scenario-based Model Deployment] エリアで [LLM Large Language Model Deployment] をクリックします。

  3. [Deploy LLM Large Language Model] ページで、以下の主要なパラメーターを設定します。

    • Model Configuration: [Public Model] を選択し、リストから Qwen3-8B を検索して選択します。

    • Inference Engine: OpenAI API 標準との互換性が高い SGLang/vLLM を推奨します。このガイドでは vLLM を使用します。詳細については、「適切な推論エンジンの選択」をご参照ください。

    • Deployment Template: [Single Machine] を選択します。システムがテンプレートに基づいて、推奨されるインスタンスタイプ、イメージ、その他のパラメーターを自動的に入力します。

  4. [Deploy] をクリックします。サービスのデプロイには約 5 分かかります。サービスステータスが [Running] に変わると、デプロイは成功です。

    説明

    サービスのデプロイに失敗した場合、詳細については、「異常なサービスステータス」をご参照ください。

ステップ 2: オンラインデバッグ

デプロイ後、まずサービスが正しく実行されていることを確認します。対象のサービス名をクリックして詳細ページに移動し、[Online Debugging] タブに切り替えて、次のようにリクエストを作成して送信します。

  1. POST メソッドを選択します。

  2. 自動入力された URL の末尾に、パス /v1/chat/completions を追加します。

  3. ヘッダーに Content-Type: application/json が含まれていることを確認します。

  4. リクエストボディを入力します: vLLM 推論エンジンを使用する場合、model の値を正しいモデル名に置き換える必要があります。モデル名は /v1/models エンドポイントに GET リクエストを送信することで取得できます。ステップ 1 で Qwen3-8B をデプロイしたため、<model_name>Qwen3-8B に置き換えます。

    {
      "model": "<model_name>",
      "messages": [
        {
          "role": "user",
          "content": "Hello!"
        }
      ],
      "max_tokens": 1024
    }

image

ステップ 3: LLM サービスの呼び出し

呼び出しを行う前に、サービス詳細ページの [Overview] タブに移動し、[View Invocation Information] をクリックして、エンドポイントとトークンを取得します。これらの値は、以下の例では <EAS_ENDPOINT> および <EAS_TOKEN> として参照されます。

API 呼び出し

model パラメーターの扱いは、推論エンジンによって大きく異なります。

  • vLLM/SGLang: model の値はモデル名として設定され、/v1/models エンドポイントに GET リクエストを送信することで取得できます。

  • BladeLLM: BladeLLM エンドポイント自体は model パラメーターを必要としません。ただし、OpenAI SDK を使用する場合、このパラメーターはクライアント側で必須です。互換性を確保するために、空の文字列 "" に設定できます。詳細については、「BladeLLM サービス呼び出しパラメーターの設定」をご参照ください。

    重要

    BladeLLM を使用する場合、リクエストで max_tokens パラメーターを明示的に設定する必要があります。そうしないと、出力はデフォルトで 16 トークンに切り捨てられます。

以下のコードは、サービスを呼び出す方法の例を示しています。

OpenAI SDK

サービスと対話するには、公式の Python SDK を使用することをお勧めします。OpenAI SDK がインストールされていることを確認してください: pip install openai

from openai import OpenAI

# 1. クライアントを設定
# <EAS_TOKEN> をデプロイされたサービスのトークンに置き換えます
openai_api_key = "<EAS_TOKEN>"
# <EAS_ENDPOINT> をデプロイされたサービスのエンドポイントに置き換えます
openai_api_base = "<EAS_ENDPOINT>/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

# 2. モデル名を取得
# BladeLLM の場合、model = "" と設定します。BladeLLM はモデル入力パラメーターを必要とせず、client.models.list() を使用したモデル名の取得をサポートしていません。OpenAI SDK の必須パラメーター要件を満たすために、空の文字列に設定します。
models = client.models.list()
model = models.data[0].id
print(model)

# 3. チャットリクエストを開始
# ストリーミング (stream=True) と非ストリーミング (stream=False) 出力をサポート
stream = True
chat_completion = client.chat.completions.create(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "hello"},          
    ],
    model=model,
    top_p=0.8,
    temperature=0.7,
    max_tokens=1024,
    stream=stream,
)

if stream:
    for chunk in chat_completion:
        print(chunk.choices[0].delta.content, end="")
else:
    result = chat_completion.choices[0].message.content
    print(result)

cURL

簡単なテストやスクリプトの統合には、cURL を使用できます。

curl -X POST <EAS_ENDPOINT>/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: <EAS_TOKEN>" \
    -d '{
        "model": "<model_name>",
        "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "hello"
        }
        ],
        "max_tokens":1024,
        "temperature": 0.7,
        "top_p": 0.8,
        "stream":true
    }' 

ここで:

  • <EAS_ENDPOINT><EAS_TOKEN> を、サービスのエンドポイントとトークンに置き換えます。

  • <model_name> をモデル名に置き換えます。vLLM/SGLang の場合、モデルリストのエンドポイント <EAS_ENDPOINT>/v1/models から取得できます。BladeLLM の場合、このエンドポイントはサポートされておらず、このフィールドを省略するか、"" に設定できます。

  • curl -X GET <EAS_ENDPOINT>/v1/models -H "Authorization: <EAS_TOKEN>"

Python requests ライブラリ

OpenAI SDK の依存関係を追加したくない場合は、requests ライブラリを使用できます。

import json
import requests

# <EAS_ENDPOINT> をデプロイされたサービスのエンドポイントに置き換えます
EAS_ENDPOINT = "<EAS_ENDPOINT>"
# <EAS_TOKEN> をデプロイされたサービスのトークンに置き換えます
EAS_TOKEN = "<EAS_TOKEN>"
# <model_name> をモデル名に置き換えます。モデル名は <EAS_ENDPOINT>/v1/models のモデルリストインターフェイスから取得できます。BladeLLM の場合、このインターフェイスはサポートされていません。"model" フィールドを省略するか、"" に設定できます。
model = "<model_name>"

url = f"{EAS_ENDPOINT}/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": EAS_TOKEN,
}

stream = True
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "hello"},
]

req = {
    "messages": messages,
    "stream": stream,
    "temperature": 0.7,
    "top_p": 0.8,
    "max_tokens": 1024,
    "model": model,
}
response = requests.post(
    url,
    json=req,
    headers=headers,
    stream=stream,
)

if stream:
    for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False):
        msg = chunk.decode("utf-8")
        # 以下のコードは、Server-Sent Events (SSE) 形式のストリーミング応答を処理します
        if msg.startswith("data:"):
            info = msg[6:]
            if info == "[DONE]":
                break
            else:
                resp = json.loads(info)
                if resp["choices"][0]["delta"].get("content") is not None:
                    print(resp["choices"][0]["delta"]["content"], end="", flush=True)
else:
    resp = json.loads(response.text)
    print(resp["choices"][0]["message"]["content"])

ローカル WebUI の構築

Gradio は、機械学習モデル用の対話型インターフェイスを迅速に作成するための、ユーザーフレンドリな Python ライブラリです。以下の手順に従って、Gradio WebUI をローカルで実行できます。

  1. コードのダウンロード: デプロイ時に選択した推論エンジンに基づいて、適切なコードをダウンロードします。GitHub へのネットワークアクセスが安定している場合は GitHub リンクを使用してください。そうでない場合は、OSS リンクを使用してください。

  2. 環境の準備: Python 3.10 以降が必要です。依存関係をインストールします: pip install openai gradio

  3. Web アプリケーションの起動: ターミナルで次のコマンドを実行します。<EAS_ENDPOINT><EAS_TOKEN> を、サービスのエンドポイントとトークンに置き換えます。

    python webui_client.py --eas_endpoint "<EAS_ENDPOINT>" --eas_token "<EAS_TOKEN>"
  4. アプリケーションが正常に起動すると、ローカル URL (通常は http://127.0.0.1:7860) がコンソールに出力されます。ブラウザでこの URL を開いて WebUI にアクセスします。

サードパーティアプリケーションとの統合

OpenAI API をサポートするさまざまなクライアントや開発ツールと EAS サービスを統合できます。設定については、サービスのエンドポイントとトークン、およびモデル名が重要です。

Dify

  1. OpenAI-API-compatible モデルプロバイダーのインストール

    右上のプロフィール写真をクリックし、[Settings] を選択します。左側のナビゲーションウィンドウで、[Model Providers] を選択します。[Model List][OpenAI-API-compatible] がない場合は、下のリストから見つけてインストールします。

    image

  2. モデルの追加

    [OpenAI-API-compatible] カードの右下にある [Add Model] をクリックし、次のパラメーターを設定します。

    • Model Type: LLM を選択します。

    • Model Name: vLLM デプロイの場合、/v1/models エンドポイントに GET リクエストを送信して名前を取得します。この例では Qwen3-8B を使用します。

    • API Key: EAS サービスのトークンを入力します。

    • API endpoint URL: EAS サービスのパブリックエンドポイントを入力します。注: 末尾に /v1 を追加してください。

  3. モデルのテスト

    1. Dify のメインページで、[Create Blank App] をクリックします。[Chatflow] タイプを選択し、アプリケーション名などの情報を入力してから、[Create] をクリックします。

    2. LLM ノードをクリックし、追加したモデルを選択して、コンテキストとプロンプトを設定します。image

    3. 右上の [Preview] をクリックし、質問を入力します。

      image

Chatbox

  1. Chatbox にアクセスし、お使いのデバイスに適したバージョンをダウンロードしてインストールするか、直接 [Launch The Web Version] します。このガイドでは、macOS M3 を例として使用します。

  2. モデルプロバイダーを追加します。[Settings] をクリックし、モデルプロバイダーを追加して、pai などの名前を入力します。[API Mode] には、[OpenAI API Compatible] を選択します。

    image

  1. pai モデルプロバイダーを選択し、次のパラメーターを設定します。

    • API Key: EAS サービスのトークン。

    • API Host: EAS サービスのパブリックエンドポイントを入力します。注: URL の末尾に /v1 を追加してください。

    • API Path: このフィールドは空のままにします。

    • Mdoels: [Get] をクリックしてモデルを追加します。推論エンジンが BladeLLM の場合、このインターフェイス経由でモデルを取得することはできません。[New] をクリックし、モデル名を手動で入力します。

    image

  2. チャットをテストします。[New Chat] をクリックし、テキスト入力ボックスの右下でモデルサービスを選択します。

    image

Cherry Studio

課金

コストには以下が含まれる場合があります。詳細については、「Elastic Algorithm Service (EAS) の課金詳細」をご参照ください。

  • コンピューティング料金: これがコストの大部分を占めます。EAS サービスを作成する際に、ニーズに基づいて従量課金またはサブスクリプションのリソースを選択します。

  • ストレージ料金: カスタムモデルを使用する場合、OSS に保存されているファイルにはストレージ料金が発生します。

本番運用時の注意点

適切なモデルの選択

  1. アプリケーションシナリオの明確化:

    • 一般的な会話: モデルが指示を理解し、それに従うことを確実にするために、基盤モデルではなく、必ずインストラクションチューニング済みモデルを選択してください。

    • コード生成: Qwen3-Coder シリーズなどの特化したコードモデルを選択します。これらは通常、汎用モデルよりもコード関連のタスクで優れたパフォーマンスを発揮します。

    • 特定領域のタスク: タスクが金融や法律など高度に専門化されている場合は、その領域向けにファインチューニングされたモデルを探すか、自分で汎用モデルをファインチューニングすることを検討してください。

  2. パフォーマンスとコストのバランス: 一般的に、パラメーター数が多いほどモデルの能力は高くなりますが、デプロイに必要な計算能力も増え、推論コストが高くなります。検証には、より小さなモデル (7B モデルなど) から始めることを推奨します。そのパフォーマンスが要件を満たさない場合は、徐々に大きなモデルを試してください。

  3. 権威あるベンチマークの参照: OpenCompass や LMSys Chatbot Arena のような業界で認められたリーダーボードを参照できます。これらのベンチマークは、推論、コーディング、数学などのディメンションにわたるモデルの客観的な評価を提供し、モデル選択のための貴重なガイダンスを提供します。

適切な推論エンジンの選択

  • vLLM/SGLang: オープンソースコミュニティにおける主流の選択肢として、幅広いモデルサポートと豊富なコミュニティドキュメントおよびサンプルを提供しており、統合やトラブルシューティングが容易です。

  • BladeLLM: Alibaba Cloud PAI チームによって開発された BladeLLM は、特定のモデル、特に Qwen シリーズに対して深く最適化されており、多くの場合、より高いパフォーマンスとより低い GPU メモリ消費量を実現します。

推論の最適化

  • LLM インテリジェントルーター: トークンのスループットや GPU メモリ使用量などのリアルタイムメトリクスに基づいてリクエストを動的に分散します。これにより、推論インスタンス間のコンピューティングパワーと GPU メモリの割り当てのバランスを取り、クラスターのリソース使用率とシステムの安定性を向上させます。複数の推論インスタンスがあり、リクエストの負荷が不均一になることが予想されるシナリオに適しています。

  • エキスパート並列処理と PD 分離に基づく MoE モデルのデプロイ: Mixture-of-Experts (MoE) モデルに対して、このアプローチはエキスパート並列 (EP) や Prefill-Decode (PD) 分離などの技術を使用して、推論スループットを向上させ、デプロイコストを削減します。

よくある質問

  1. エラー: Unsupported Media Type: Only 'application/json' is allowed

    リクエストの HeadersContent-Type: application/json が含まれていることを確認してください。

  2. エラー:The model '<model_name>' does not exist.

    vLLM 推論エンジンには、正しい model フィールドが必要です。/v1/models エンドポイントに GET リクエストを送信して、モデル名を取得してください。

詳細については、「EAS よくある質問」をご参照ください。