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

MaxCompute:GU リソースでの AI 関数の開発

最終更新日:Jan 14, 2026

MaxFrame AI Function は、Alibaba Cloud の MaxCompute が提供する、大規模言語モデル (LLM) を使用したオフライン推論シナリオ向けのエンドツーエンドソリューションです。データ処理と AI 機能を統合することで、エンタープライズレベルの LLM アプリケーション導入のハードルを下げます。このトピックでは、MaxFrame AI Function を使用して GU リソースで LLM を呼び出す方法について説明します。

適用範囲

  • 環境の準備

    • MaxFrame ソフトウェア開発キット (SDK) バージョン 2.3.0 以降。

    • Python バージョン 3.11。

    • MaxCompute プロジェクトで GPU リソースクォータ (GU) が有効になっていること。

  • 権限の構成

環境の構成

GPU を使用するには、gu_quota_name が必要です。

import os
import maxframe.dataframe as md
import numpy as np
from maxframe import new_session
from maxframe.config import options
from maxframe.udf import with_running_options
from odps import ODPS
import logging

options.dag.settings = {
    "engine_order": ["DPE", "MCSQL"],
    "unavailable_engines": ["SPE"],
}

logging.basicConfig(level=logging.INFO)

# -------------------------------
# MaxFrame セッションの初期化
# -------------------------------
o = ODPS(
    # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が AccessKey ID に設定されていることを確認します。
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が AccessKey Secret に設定されていることを確認します。
    # AccessKey ID と AccessKey Secret の文字列を直接使用しないでください。
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<ご利用のプロジェクト>',
    endpoint='https://service.cn-<ご利用のリージョン>.maxcompute.aliyun.com/api',
)

session = new_session(o)

options.session.gu_quota_name = "xxxxx" # ご利用の GU クォータ名に置き換えます。

print("LogView address:", session.get_logview_address())

マネージド LLM の呼び出し (LLM.generate)

ステップ 1: 入力データの準備

import pandas as pd
from IPython.display import HTML

# デバッグ用に表示オプションを設定します。
pd.set_option("display.max_colwidth", None)
pd.set_option("display.max_columns", None)
HTML("<style>div.output_area pre {white-space: pre-wrap;}</style>")

# クエリリストを作成します。
query_list = [
    "What is the average distance between the Earth and the Sun?",
    "In what year did the American Revolutionary War begin?",
    "What is the boiling point of water?",
    "How can I quickly relieve a headache?",
    "Who is the main character in the Harry Potter series?",
]

# MaxFrame DataFrame に変換します。
df = md.DataFrame({"query": query_list})
df.execute() 

ステップ 2: LLM インスタンスの初期化

from maxframe.learn.contrib.llm.models.managed import ManagedTextGenLLM

llm = ManagedTextGenLLM(
    name="Qwen3-4B-Instruct-2507-FP8"  # モデル名は完全に一致する必要があります。
)

サポートされているモデルの詳細については、「MaxFrame AI 関数でサポートされているモデル (随時更新)」をご参照ください。

ステップ 3: プロンプトテンプレートの定義

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Please answer the following question: {query}"},
]

テンプレートの構文:

  • {column_name} プレースホルダーを使用すると、DataFrame 内の対応するフィールドの値に自動的に置き換えられます。

  • マルチターンカンバセーション (messages リスト) がサポートされています。

  • システムプロンプト (system) は、ロールの動作を定義するために使用されます。

ステップ 4: 生成タスクの実行

result_df = llm.generate(
    df,# 入力データ
    prompt_template=messages,
    running_options={"max_tokens": 4096, # 最大出力長
                     "verbose": True # 詳細なログ出力モードを有効にします
                    },
    params={"temperature": 0.7},
)

# 実行して結果を取得します。
result_df.execute()

出力の説明

result_df は、以下のフィールドを含む MaxFrame DataFrame です。

フィールド

説明

query

string

元の入力

generated_text

string

モデルによって生成されたレスポンス

finish_reason

string

理由 (例: stoplength)

usage.prompt_tokens

int

入力トークン数

usage.completion_tokens

int

出力トークン数

usage.total_tokens

int

合計トークン数

デバッグとパフォーマンスチューニングのヒント

パフォーマンスとコストの最適化

最適化

推奨事項

バッチサイズ

OOM (メモリ不足) を避けるため、各バッチの項目数を < 100 に維持します。

GU 割り当て

gu=2 は 4B モデルに適しています。より大きなモデルには、より多くの GU が必要です。

並列度

MaxFrame は同時実行ジョブを自動的にスケジュールします。これは num_workers で制御します。

中間結果のキャッシュ

to_odps_table() を使用して中間テーブルを保存し、再計算を回避します。

タイムアウト設定

ジョブのスタックを防ぐために timeout=3600 を追加します。

デバッグのヒント

  • 実行ログの表示

    print(session.get_logview_address())  # リンクをクリックして、リアルタイムの MaxFrame ジョブログを表示します。
  • 小規模テスト

    df_sample = df.head(2)  # テスト用に 2 つのデータエントリを取得します。
    result_sample = llm.generate(df_sample, prompt_template=messages, running_options={"gu": 2})
    result_sample.execute()
  • リソース使用量の確認

    MaxFrame Logview でジョブの詳細な実行ステータスを確認できます。