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) が有効になっていること。
権限の構成
現在のアカウントに、少なくともプロジェクトレベルの MaxCompute の読み取りおよび書き込み権限があること。
環境の構成
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 です。
フィールド | 型 | 説明 |
| string | 元の入力 |
| string | モデルによって生成されたレスポンス |
| string | 理由 (例: |
| int | 入力トークン数 |
| int | 出力トークン数 |
| int | 合計トークン数 |
デバッグとパフォーマンスチューニングのヒント
パフォーマンスとコストの最適化
最適化 | 推奨事項 |
バッチサイズ | OOM (メモリ不足) を避けるため、各バッチの項目数を |
GU 割り当て |
|
並列度 | MaxFrame は同時実行ジョブを自動的にスケジュールします。これは |
中間結果のキャッシュ |
|
タイムアウト設定 | ジョブのスタックを防ぐために |
デバッグのヒント
実行ログの表示
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 でジョブの詳細な実行ステータスを確認できます。