全部產品
Search
文件中心

MaxCompute:AI Function On GU 開發實踐

更新時間:Jan 14, 2026

MaxFrame AI Function是阿里雲MaxCompute平台針對大模型離線推理情境推出的端到端解決方案,旨在通過無縫整合資料處理與 AI 能力,降低企業級大模型應用門檻。本文介紹如何基於MaxFrame AI Function功能通過GU資源調用大模型。

適用範圍

  • 環境準備

    • MaxFrame SDK為2.3.0及以上版本。

    • Python版本為3.11。

    • MaxCompute專案已開通GPU資源配額(以下簡稱GU)。

  • 許可權配置

環境配置

gu_quota_name是使用GPU的前提。

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)

# -------------------------------
# MaxFame Session 初始化
# -------------------------------
o = ODPS(
    # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變數設定為使用者 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變數設定為使用者 Access Key Secret,
    # 不建議直接使用AccessKey ID和 AccessKey Secret字串。
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<your project>',
    endpoint='https://service.cn-<your region>.maxcompute.aliyun.com/api',
)

session = new_session(o)

options.session.gu_quota_name = "xxxxx" # 替換為你的 GU Quota Name

print("LogView 地址:", session.get_logview_address())

調用託管大模型(LLM.generate)

步驟一:準備輸入資料

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 = [
    "地球距離太陽的平均距離是多少?",
    "美國獨立戰爭是從哪一年開始的?",
    "什麼是水的沸點?",
    "如何快速緩解頭痛?",
    "誰是《哈利·傳輸速率》系列中的主角?",
]

# 轉為 MaxFrame DataFrame
df = md.DataFrame({"query": query_list})
df.execute() 

步驟二:初始化 LLM 執行個體

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

llm = ManagedTextGenLLM(
    name="Qwen3-4B-Instruct-2507-FP8"  # 模型名稱需嚴格匹配
)

支援的模型詳情可參見MaxFrame AI Function支援模型(持續更新)

步驟三:定義 Prompt 模板

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "請回答如下問題:{query}"},
]

模板文法說明:

  • 使用 {column_name} 預留位置自動替換 DataFrame 中的欄位;

  • 支援多輪對話(messages 列表);

  • 系統提示(system)用於設定角色行為。

步驟四:執行產生任務

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

輸入 token 數

usage.completion_tokens

int

輸出 token 數

usage.total_tokens

int

總計 token 數

調試及效能調優建議

效能與成本最佳化

最佳化項

建議

批量大小

控制每批< 100 條,避免 OOM

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查看作業具體執行情況。