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

MaxCompute:MaxFrame AI 機能

最終更新日:May 27, 2026

このドキュメントでは、Alibaba Cloud MaxCompute で MaxFrame AI 機能を使用する方法について説明し、大規模言語モデル (LLM) のオフライン推論アプリケーションを開始するのに役立つ代表的なユースケースを提供します。

概要

MaxFrame AI 機能は、Alibaba Cloud MaxCompute プラットフォーム上で大規模言語モデル (LLM) のオフライン推論を実現するためのエンドツーエンドソリューションです。データ処理と AI 機能をシームレスに統合し、エンタープライズレベルでの LLM 導入の障壁を低減します。

  • 設計思想:「データ入力、結果出力」。これにより、MaxFrame の Python フレームワークと pandas スタイルの API を使用して、データの準備と処理からモデルの推論、結果の保存まで、ワークフロー全体を MaxCompute エコシステム内で完結させることができます。

  • 適用シナリオ:MaxFrame AI 機能は、大量の構造化データ (ログ分析やユーザー行動ログなど) 、非構造化データ (テキスト翻訳やドキュメント要約など) の処理、およびベクトル化に最適です。単一のジョブでペタバイト規模のデータを処理でき、分散コンピューティングアーキテクチャにより低レイテンシーとリニアなスケーラビリティを実現します。テキストからの構造化情報の抽出、コンテンツの要約、抄録の生成、言語翻訳、テキストの品質評価、感情分類などのタスクに使用できます。これにより、LLM のデータ処理が大幅に簡素化され、結果の品質が向上します。

  • アーキテクチャ

    MaxFrame AI 機能は、柔軟で汎用的な generate インターフェイスと、簡潔なシナリオベースの task インターフェイス (翻訳、構造化データ抽出、埋め込みなど) を提供します。モデルを選択し、MaxCompute テーブルとプロンプトを入力として提供します。

    インターフェースが実行されると、MaxFrame はまずテーブルデータを分割します。データサイズに応じて適切な並列度を設定し、ワーカーのグループを起動して計算を実行できます。各ワーカーは、提供されたプロンプトテンプレートを使用して入力データ行からプロンプトをレンダリングし、推論を実行して、成功ステータスを含む結果を MaxCompute に書き戻します。

    全体のアーキテクチャとワークフローを以下の図に示します。

    image.png

  • 主な利点

    • 使いやすさ:使い慣れた Python API、すぐに使えるモデルライブラリ、デプロイコストゼロ。

    • スケーラビリティ:MaxCompute のコンピューティングユニット (CU) 、GPU ユニット (GU) 、および推論クォータ (トークンベース) のリソースを活用し、大規模な並列処理をサポートし、全体的なトークンスループットを向上させます。

    • データ + AI の統合:データの読み取りと処理から AI 推論、結果の保存まで、ワークフロー全体を単一のプラットフォームで完結させます。これにより、データ移行コストが削減され、開発効率が向上します。

    • 幅広いシナリオをカバー:翻訳、構造化データ抽出、ベクトル化など、10 以上の一般的なシナリオをカバーします。

前提条件

  • サポート対象リージョン

    China (Hangzhou)、China (Shanghai)、China (Beijing)、China (Ulanqab)、China (Shenzhen)、China (Chengdu)、China (Hong Kong)、China (Hangzhou) Finance Cloud、および China (Shanghai) Finance Cloud。

  • サポート対象の Python バージョン:Python 3.11。

  • サポート対象の SDK バージョン:MaxFrame SDK のバージョンが 2.7.1 以降であることを確認してください。バージョンは次のコマンドを実行して確認できます。

    # Windows の場合
    pip list | findstr maxframe
    
    # Linux の場合
    pip list | grep maxframe

    お使いのバージョンが古い場合は、pip install --upgrade maxframe を実行して最新バージョンにアップグレードしてください。

  • 最新の MaxFrame クライアントをインストールしてください。

サポートされるモデル

現在、MaxFrame は、Qwen 3Deepseek-R1-Distill-QwenQwen3-embedding など、一連の組み込み大規模言語モデル (LLM) を標準でサポートしています。また、Model Studio (百煉) から qwen3.7-maxqwen3.6-plusqwen3.6-flashdeepseek-v4-prodeepseek-v4-flashqwen3-vl-embeddingtext-embedding-v4 などの商用 LLM を呼び出すこともサポートしており、マルチモーダルとテキストベースの両方の商用フラッグシップモデルを網羅しています。すべてのモデルは MaxCompute プラットフォーム内でオフラインでホストされます。このため、モデルのダウンロード、配布、API 呼び出しの同時実行数制限について心配する必要がありません。簡単な API 呼び出しでモデルを使用できるため、MaxCompute の大規模なコンピューティングリソースを最大限に活用し、高い全体的なトークンスループットと同時実行性で LLM のオフライン推論タスクを完了させることができます。

モデルカタログ

モデルシリーズ

モデル名

適用クォータ

Model Studio (Bailian) 商用モデル

  • qwen3.7-max

  • qwen3.6-plus

  • qwen3.6-flash

  • deepseek-v4-pro

  • deepseek-v4-flash

  • qwen3-vl-embedding

  • text-embedding-v4

  • 従量課金 AI 推論サービス (トークン)

Qwen 3 シリーズモデル

  • Qwen3-0.6B

  • Qwen3-1.7B

  • Qwen3-4B

  • Qwen3-8B

  • Qwen3-14B

  • 従量課金標準コンピューティングユニット (CU)

  • サブスクリプション標準コンピューティングユニット (CU)

  • サブスクリプション標準 GPU ユニット (GU)

Qwen3 Embedding モデル

  • Qwen3-Embedding-8B

  • サブスクリプション標準 GPU ユニット (GU)

DeepSeek-R1-Distill-Qwen シリーズモデル

  • DeepSeek-R1-Distill-Qwen-1.5B

  • DeepSeek-R1-Distill-Qwen-7B

  • DeepSeek-R1-Distill-Qwen-14B

  • 従量課金標準 CU

  • サブスクリプション標準 CU

DeepSeek-R1-0528-Qwen3-8B

  • DeepSeek-R1-0528-Qwen3-8B

  • 従量課金標準 CU

  • サブスクリプション標準 CU

クォータリソースの種類

MaxFrame は 3 種類のリソースをサポートしており、モデルのサイズやビジネス要件に最適なものを選択できます。

CU クォータリソース

CU (1 CU = 1 vCPU + 4 GB メモリ) は、汎用的な CPU コンピューティングリソースを提供し、小規模なモデルやデータ量の少ない推論タスクに適しています。

設定

# CU クォータのコンピューティングリソースを使用
options.session.quota_name = "mf_cpu_quota"

GU クォータリソース

GU は、LLM 推論に最適化された GPU コンピューティングリソースを提供します。より大きなモデルをサポートし、8B パラメータ以上のモデルでの推論タスクに適しています。

設定

# GU クォータのコンピューティングリソースを使用
options.session.gu_quota_name = "mf_gpu_quota"

推論クォータリソース (トークンベースの課金)

このオプションを使用すると、qwen3-maxtext-embedding-v4 などの商用 LLM を Model Studio (Bailian) から直接呼び出すことができます。課金は実際のトークン消費量に基づきます。このアプローチでは、CU/GU リソースのプロビジョニングや基盤インフラストラクチャの管理が不要になり、柔軟で便利、かつコスト効率の高いソリューションを提供します。

設定

# 推論クォータのコンピューティングリソースを使用
options.session.inference_quota_name = "mf_token_quota"

関連 API

MaxFrame AI 機能は、柔軟性と使いやすさのバランスを取るため、汎用の generate インターフェースとシナリオベースの Task インターフェースの 2 種類を提供します。

汎用: generate

その generate インターフェイス

主要なパラメータ

パラメータ

必須

説明

model_name

はい

使用するモデルの名前。

df

はい

DataFrame にカプセル化された、分析対象のテキストまたはデータ。

prompt_template

はい

OpenAI チャットメッセージ形式に対応したメッセージのリスト。コンテンツで f-string 構文を使用して DataFrame の列を参照できます。

タスク固有: タスク

シナリオ固有のインターフェイス:タスク

プリセットされ、標準化されたタスクインターフェイスにより、一般的なシナリオでの開発が簡素化されます。現在サポートされている task インフェイスには、translateextract、および embedding が含まれます。

  • 主要なパラメータ

    パラメータ

    必須

    説明

    model_name

    はい

    使用するモデルの名前。

    df

    はい

    DataFrame にカプセル化された、分析対象のテキストまたはデータ。

    Task-specific method

    はい

    • translate:テキスト翻訳

    • extract: 構造化データの抽出

    • embed:ベクトル化

  • 使用例

    from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM
    
    llm = ManagedTextLLM(name="<model_name>")
    
    # テキスト翻訳
    translated_df = llm.translate(
        df["english_column"],
        source_language="english",
        target_language="japanese",
        examples=[("Hello", "こんにちは"), ("Goodbye", "さようなら")],
    )
    
    translated_df.execute()

代表的なユースケース

GU クォータ

GU クォータのシナリオ

言語翻訳

シナリオ:ある多国籍企業が、100,000 件の英語の契約書を日本語に翻訳し、主要な条項に注釈を付ける必要があります。

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

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

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

# MaxFrame セッションを初期化
session = new_session(o)

# ジョブの Logview URL を出力
print(session.get_logview_address())

# 1. GU クォータのコンピューティングリソースを使用
options.session.gu_quota_name = "mf_gu_quota"

# 2. Qwen3-1.7B モデルを使用
from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="Qwen3-1.7B")

# 3. データを準備します。データが既にある場合は、この手順をスキップできます。
# o.execute_sql("""
#   CREATE TABLE IF NOT EXISTS raw_contracts (
#       en STRING
#   );
#   """)
# 
# o.execute_sql("""
#   INSERT INTO raw_contracts VALUES
#   ('This agreement is governed by the laws of the State of California.'),
#   ('The tenant shall pay rent on the first day of each month.'),
#   ('Either party may terminate this contract with 30 days written notice.'),
#   ('All intellectual property rights shall remain with the original owner.'),
#   ('The warranty period for this product is twelve months from the date of purchase.');
#   """)

df = md.read_odps_table("raw_contracts")

# 4. プロンプトテンプレートを定義
messages = [
    {
        "role": "system",
        "content": "あなたは、ユーザーの英語のテキストを流暢な日本語に翻訳できる文書翻訳の専門家です。",
    },
    {
        "role": "user",
        "content": "以下の英語のテキストを日本語に翻訳してください。翻訳されたテキストのみを出力し、他のコンテンツは含めないでください。\n\n 例:\nInput: Hi\nOutput: こんにちは。\n\n 翻訳するテキスト:\n\n{en}",
    },
]

# 5. `generate` インターフェースを呼び出し、プロンプトを定義し、対応するデータ列を参照
result_df = llm.generate(
    df,
    prompt_template=messages,
    params={
        "temperature": 0.7,
        "top_p": 0.8,
    },
).execute()

# 6. 結果を MaxCompute テーブルに書き込む
result_df.to_odps_table("raw_contracts_result")

キーワード抽出

シナリオ:このユースケースでは、MaxFrame AI 機能が非構造化データをどのように処理するかを示します。非構造化データの大部分はテキストと画像で構成されており、ビッグデータ分析において大きな課題となっています。以下の例は、AI 機能を使用してこのプロセスを簡素化する方法を示しています。

次のコードは、AI 機能を使用して履歴書から候補者の職務経歴を抽出する方法を示しています。この例では、入力データとしてランダムに生成された履歴書テキストを使用しています。詳細なベストプラクティスとデモについては、「AI Function on GU Development Practices」をご参照ください。

import maxframe.dataframe as md
from maxframe import new_session
from maxframe.config import options
from maxframe.udf import with_running_options
from odps import ODPS

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

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

# MaxFrame セッションを初期化
session = new_session(o)

# ジョブの Logview URL を出力
print(session.get_logview_address())

# 1. GU クォータのコンピューティングリソースを使用
options.session.gu_quota_name = "mf_gu_quota"

# 2. Qwen3 4B モデルを使用
from maxframe.learn.contrib.llm.models.managed import ManagedTextLLM

llm = ManagedTextLLM(name="Qwen3-4B-Instruct-2507-FP8")

df = md.read_odps_table("traditional_chinese_medicine", index_col="index")

# 4つの並列パーティションを指定
parallel_partitions = 4
df = df.mf.rebalance(num_partitions=parallel_partitions)

# 3. 事前設定された `extract` タスクインターフェースを使用
result_df = llm.extract(
    df["text"],
    description="以下の医療記録から構造化データを順番に抽出してください。スキーマに従って、最終的な出力を厳密な JSON 形式で返してください。",
    schema=MedicalRecord,
    examples=[(example_input, example_output)],
)
result_df.execute()

推論クォータリソースのシナリオ (トークンベースの課金)

推論クォータリソースのシナリオ

テキストのベクトル化:text-embedding-v4

シナリオの説明: Model Studio (Bailian) の商用モデル text-embedding-v4 を使用して、ベクトル化タスクを実行します。 課金はトークンの消費量に基づいており、基盤となるコンピューティングリソースを管理する必要がなくなります。 このシナリオは、Model Studio (Bailian) の大規模モデルや商用大規模言語モデル (LLM) を必要とする、複雑なテキスト分析や高品質な推論タスクに適しています。

サンプルコードは次のとおりです。

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

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

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

# MaxFrame セッションを初期化
session = new_session(o)

# ジョブの Logview URL を出力
print(session.get_logview_address())

# 1. トークンクォータのコンピューティングリソースを使用
options.session.inference_quota_name = "mf_token_quota"

# 2. text-embedding-v4 モデルインスタンスを作成 (トークンクォータを使用)
# Model Studio (Bailian) のパブリックモデルセットから text-embedding-v4 モデルをロード
from maxframe.learn.utils import read_odps_model

llm = read_odps_model("text-embedding-v4", project="bigdata_public_modelset")

# 3. データを読み込む
df = md.read_odps_table("user_feedback_table")

# 4. ベクトル化を実行
result_df = llm.embed(
    df["query"],
    running_options={"max_tokens": 1024, "verbose": True},
    simple=True,
).execute()

# 5. 結果を MaxCompute テーブルに書き込む
result_df.to_odps_table("feedback_analysis_result")

VL マルチモーダル画像理解:Qwen3.6-Plus

シナリオの説明:このシナリオは、大規模モデルや Model Studio (Bailian) の商用 LLM を必要とする高品質な推論や複雑なテキスト分析、マルチモーダルデータ処理タスクに適しています。リソースはオンデマンドで消費されるため、コストを管理しやすくなります。

サンプルコードは次のとおりです。

import os

import pandas as pd
import maxframe.dataframe as md
from maxframe import new_session
from maxframe.config import options
from maxframe.learn.contrib.llm import ImageContentType
from maxframe.learn.utils import read_odps_model
from odps import ODPS

# 実行エンジンを設定:DPE を優先
options.dag.settings = {
 "engine_order": ["DPE", "MCSQL"],
}

# トークンクォータのコンピューティングリソースを使用 (Model Studio 商用モデル)
options.session.inference_quota_name = "<your-token-quota-name>"

# 1. ODPS 接続を作成
o = ODPS(
 os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
 os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
 project="<your-project-name>",
 endpoint="<your-endpoint>", # 例:https://service.cn-shanghai.maxcompute.aliyun.com/api
)

# 2. エンジンを設定し、セッションを作成
# Model Studio VL モデルの推論は DPE エンジンで実行され、トークン消費量に応じて課金されます。CU/GU リソースのプロビジョニングは不要です。
session = new_session(o)
print(f"Session ID: {session.session_id}")
print(f"Logview: {session.get_logview_address()}")

## 3. Model Studio VL モデルをロード
# MaxCompute パブリックモデルセットから事前登録されたマルチモーダル理解モデルをロード
image_llm = read_odps_model(
 "qwen3.6-plus", project="bigdata_public_modelset", odps_entry=o
)

## 4. OSS 画像データを準備
# `oss://<endpoint>/<bucket>/<path>` 形式を使用し、`storage_options` を介して OSS アクセス認証情報を渡します。
# OSS 設定
OSS_ENDPOINT = "oss-cn-shanghai-internal.aliyuncs.com" # ご自身の OSS エンドポイントに置き換えてください
OSS_BUCKET = "your-bucket" # ご自身のバケット名に置き換えてください
OSS_PREFIX = "images" # 画像パスのプレフィックスに置き換えてください

storage_options = {
 "access_key_id": os.getenv("OSS_ACCESS_KEY_ID"),
 "access_key_secret": os.getenv("OSS_ACCESS_KEY_SECRET"),
}

# 画像 URL リストを作成
image_urls = [
 f"oss://{OSS_ENDPOINT}/{OSS_BUCKET}/{OSS_PREFIX}/image{i}.jpg"
 for i in range(1, 9)
]

df = md.DataFrame({"image_url": image_urls})
df.execute()

## 5. VL モデルを呼び出して画像理解を実行
# `generate()` インターフェースを使用して、テキストプロンプトと OSS 画像をモデルに渡します。
cp = image_llm.content_part

result_df = image_llm.generate(
 df,
 messages=[
 {
 "role": "user",
 "content": [
 cp.text("この画像を 1 文で説明してください"),
 cp.image(
 data=df.image_url,
 type=ImageContentType.IMAGE_URL,
 storage_options=storage_options,
 ),
 ],
 }
 ],
 simple_output=True,
 params={"max_tokens": 128},
)

## 6. 推論を実行し、結果を表示
# MaxFrame は遅延実行を使用します。`.execute()` を呼び出して実際の計算をトリガーします。
result = result_df.execute()
print(result)

## 7. リソースをクリーンアップ
session.destroy()
print("Session destroyed")

パフォーマンス最適化

並列推論

MaxFrame は、大規模なオフライン推論に並列コンピューティングを使用します。

  1. データシャーディング: rebalance API は、指定されたパーティション数 (num_partitions) に基づいて、入力データテーブルを複数のワーカーノードに均等に分散します。

  2. 並列モデルロード:各ワーカーは、モデルを独立してロードし、事前にウォームアップします。これにより、モデルのロードによるコールドスタートのレイテンシーを回避できます。

  3. 結果の集約:出力結果はパーティションごとに MaxCompute テーブルに書き込まれます。これにより、後のデータ分析をサポートします。

一般的なパフォーマンスチューニングの推奨事項

  1. ヘテロジニアスコンピューティングリソースの切り替え

    8B 以上の大規模モデルでは、CPU 推論は非効率です。推論には GU クォータまたはトークンクォータのコンピューティングリソースに切り替えてください。

  2. データパーティションの並列処理

    大規模なオフライン推論ジョブでは、rebalance API を使用して、データをシャーディングして並列処理します。