AI Function On GU 开发实践

MaxFrame AI Function是阿里云MaxCompute平台针对大模型离线推理场景推出的端到端解决方案,旨在通过无缝集成数据处理与 AI 能力,降低企业级大模型应用门槛。本文介绍如何基于MaxFrame AI Function功能通过GU资源调用大模型。

适用范围

  • 环境准备

    • MaxFrame SDK2.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查看作业具体执行情况。