阿里云人工智能平台 PAI(Platform of Artificial Intelligence)是一站式、全链路 AI 研发平台,把"数据 → 模型 → 服务"整个生命周期搬到云端,用一套账号、一套工作空间就能完成团队协作与资源治理。整体分 4 层架构:
Model Gallery 只支持sft微调 其他预训练不支持的
- 基础资源层:CPU/GPU/灵骏智算/通用 ACK 容器、MaxCompute/Flink 大数据引擎
- 平台工具层:数据标注、可视化建模、交互式开发、分布式训练、特征中心、在线推理等 20+ 子产品
- 应用层:与 ModelScope、DashScope、百炼等模型广场互通,可一键调用或上架模型
- 业务层:针对自动驾驶、金融风控、推荐搜索、科研智算等场景提供开箱即用的解决方案
下面把 PAI 控制台左侧菜单重新归类,方便快速看懂每个模块的定位与典型用法。
一、工作空间(顶层门户)
• 作用:把"人 + 算力 + 数据 + 模型"圈在一个隔离环境内,支持 RBAC 角色权限、消息通知、存储路径、资源配额等统一治理
• 默认会送一组按量付费资源,新用户 5 分钟即可拉起第一个实验
二、数据准备
- 智能标注 iTAG
-- 支持图像、文本、视频、语音、PDF、多模态等 10+ 标注场景,内置 OCR、ASR 预标模型;也可购买全托管人力标注服务 - 数据集(AI 资产管理)
-- 统一管理 OSS/NAS 数据源,提供版本、血缘、Schema、权限、SDK 调用,训练时自动缓存加速
三、模型开发 & 训练
- Model Gallery(零代码大模型中心)
-- 把开源社区(ModelScope / HuggingFace)热门模型封装成"一键训练 + 一键部署"卡片,无需写代码即可微调并发布服务 - Notebook Gallery
-- 提供多领域(CV/NLP/语音/推荐)可一键启动的 Notebook 案例,自动关联所需数据集和镜像,适合教学与快速验证 - 交互式建模 DSW(Data Science Workshop)
-- 云端 JupyterLab / VSCode,即开即用 CPU/GPU 实例,内置主流框架镜像,支持 Root 权限、Git、插件市场 - 可视化建模 Designer
-- 拖曳 140+ 算法组件即可搭工作流,支持定时调度、DataWorks 离线周期运行;内置电商推荐、金融风控、空气质量预测等模板,可直接复现 - 分布式训练 DLC(Deep Learning Containers)
-- 云原生训练平台,单卡到千卡级分布式,零运维,支持 TensorFlow/PyTorch/Megatron/DeepSpeed/RLHF,自动容错 + 训练快照 - 特征平台 FeatureStore
-- 统一离在线特征定义、同步、样本导出,保证训练-推理一致性;提供任务中心监控特征生产链路 - 自动机器学习 AutoML
-- 自动超参搜索(HPO)、神经网络架构搜索(NAS)、模型集成,适合缺乏算法经验的业务团队
四、模型应用 & 评测
- 模型评测 ModelEval
-- 内置 Accuracy、AUC、BLEU、ROUGE、困惑度等 50+ 指标,支持自定义脚本,一键生成可视化报告 - 大模型应用开发 LangStudio
-- 面向 LLM 的编排 IDE,支持 Prompt 模板、知识库、插件、Chain-of-Thought 调试,可发布为在线 API 或微信小程序
五、模型部署
- 模型在线服务 EAS(Elastic Algorithm Service)
-- CPU/GPU/ASIC 混合负载,一键部署为高可用 REST/gRPC 服务;支持蓝绿、滚动、A/B 发布,自动弹性伸缩 - A/B 实验 ABTest
-- 灰度放量、流量染色、实时指标对比,可与 DataWorks 数据漏斗打通,实现业务效果闭环验证
六、AI 资产管理(贯穿全链路)
数据集、模型、镜像、任务、代码配置、自定义组件 6 大仓库全部支持版本管理、权限隔离、血缘追踪、SDK 调用,方便企业做审计与复现
七、AI 安全治理
• 安全护栏:输入/输出内容实时风控,支持关键词、正则、DLP、模型级风险评分
• 公平性分析:检测性别、年龄、地域等敏感属性带来的模型偏差
• 错误性分析:可视化查看误分样本分布,快速定位数据或特征缺陷
• 模型安全:对抗样本检测、模型窃取防护、水印溯源
典型使用流程(新用户 10 分钟上手)
- 控制台"一键开通" → 系统自动创建默认工作空间
- Model Gallery 选"BERT 情感分类"卡片 → 点击"训练"→ 3 分钟后产出模型
- 同一卡片点击"部署"→ 1 分钟后生成在线 API
- 用 Postman 调用接口测试,整个链路无需写代码
一句话总结
PAI = 数据标注 + 交互式/可视化/分布式建模 + 大模型中心 + 在线推理 + 企业级治理,所有环节都提供"零代码快捷入口"和"专家深度定制"两种模式,既适合算法小白,也能满足算法工程师对底层框架、算子、资源的极致控制。
下面给出一条"从零到可上线"的完整路线,全部在阿里云 PAI 平台内完成,包含
① ZINC20(~20 万分子 SMILES)自监督预训练 →
② DrugBank 有监督微调(SFT)→
③ 自建奖励模型 + RLHF(PPO)对齐。
每一步都给出:数据格式、PAI 产品入口、关键超参、脚本示例、耗时/费用估算。
(默认你已经开好 PAI 工作空间并绑定 OSS 与 GPU 按量付费资源)
- 前置准备
-
创建 OSS Bucket
路径规划(可照抄):
•
s3://your-bucket/data/zinc20/# 原始/清洗后 SMILES•
s3://your-bucket/data/drugbank/# 分子-靶标/属性标签•
s3://your-bucket/data/rlhf/# 偏好排序对•
s3://your-bucket/checkpoint/# 所有模型保存点 -
镜像选择
PAI-DSW 公共镜像
pytorch:2.1-gpu-py310-cu118-ubuntu20.04已自带
transformers>=4.40、deepspeed、rdkit、datasets、wandb。
- 数据清洗与格式统一
ZINC20
① 下载 20 万条"drug-like"子集(官方 CSV 含 SMILES、MW、LogP 等)。
② 用 RDKit 清洗:去重、去盐、中性化、过滤 MW∈[150,700]、LogP∈[-2,5]。
③ 最终保存为纯文本文件 zinc20_clean.txt,每行一条 SMILES。
例:
CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O
CCN(CC)CCOC(=O)c1ccc(N)cc1
...
DrugBank(微调)
① 下载 DrugBank 5.x XML,解析出 → 批准 SMILES、靶标、适应症。
② 构造"分子-描述"对,格式:
{"smiles": "CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O",
"text": "The molecule is a nonsteroidal anti-inflammatory drug (NSAID) that is used to treat mild to moderate pain, fever, and inflammation."}
③ 随机拆分 8:1:1 → drugbank_train.jsonl / valid.jsonl / test.jsonl
RLHF 偏好数据
① 用 SFT 后的模型对 5 000 条 DrugBank 分子生成 2 条候选描述(温度 0.8/1.2)。
② 人工/半自动排序(可外包):A > B 或 A ≈ B。
③ 保存为:
{"smiles": "...", "chosen": "...", "rejected": "..."}
- 预训练:ZINC20 自监督
目标:让 GPT 学会"合理 SMILES 语法与化学句法"。
模型:6 层 Decoder-only(GPT-2 Small 规模,约 110 M 参数),词表=正则切分 SMILES 字符。
PAI 入口:PAI-DSW → 新建 Notebook → 选择 GPU(推荐 8×A100 40G)
核心脚本(已开源在 aliyun-pai-examples/molecular-gpt):
python
from transformers import GPT2Config, GPT2LMHeadModel, Trainer, TrainingArguments
from datasets import load_dataset
# 1. 加载数据
dataset = load_dataset('text', data_files={'train':'zinc20_clean.txt'}, split='train')
tokenizer = get_smiles_tokenizer() # 自定义字符级
def tokenize(examples):
return tokenizer(examples['text'], truncation=True, max_length=128)
tokenized = dataset.map(tokenize, batched=True, remove_columns=['text'])
# 2. 模型
config = GPT2Config(vocab_size=len(tokenizer), n_layer=6, n_head=12, n_embd=768)
model = GPT2LMHeadModel(config)
# 3. 训练参数
args = TrainingArguments(
output_dir='s3://your-bucket/checkpoint/zinc20-pretrain/',
per_device_train_batch_size=96,
gradient_accumulation_steps=8,
num_train_epochs=10,
learning_rate=2e-4,
fp16=True,
deepspeed='ds_config_zero2.json', # 8 卡并行
logging_steps=100,
save_steps=2000,
report_to=['wandb'],
)
trainer = Trainer(model=model, args=args, train_dataset=tokenized)
trainer.train()
耗时/费用:
8×A100 40G 训练 10 epoch ≈ 14 h,按量付费约 1 200 元。
验证:perplexity 降到 1.8 以下即收敛。
- 监督微调:DrugBank 分子描述
任务:输入 SMILES,输出一段人类可读描述(回归"分子-文本"对齐)。
数据:上一步的 drugbank_train.jsonl(约 12 k 条)。
脚本改动要点:
python
# 1. 读取 JSONL
raw_ds = load_dataset('json', data_files={'train':'drugbank_train.jsonl'})
# 2. prompt 模板
prompt = "Describe the molecule: {smiles}\nDescription:"
def format(ex):
inputs = prompt.format(smiles=ex['smiles'])
targets = ex['text']
model_inputs = tokenizer(inputs, max_length=128, truncation=True)
labels = tokenizer(targets, max_length=128, truncation=True)
model_inputs['labels'] = labels['input_ids']
return model_inputs
tokenized = raw_ds.map(format, remove_columns=['smiles','text'])
# 3. 加载预训练权重
model = GPT2LMHeadModel.from_pretrained('s3://your-bucket/checkpoint/zinc20-pretrain/')
# 4. 训练 5 epoch,lr=5e-5,单卡 A100 约 40 min
- RLHF:对齐"人类偏好"
PAI 目前原生没开放 RLHF 图形化,但可以用 DSW + 自研脚本跑标准三阶段(InstructGPT 范式):
阶段 1:奖励模型(RM)
• 输入:成对 (chosen, rejected) 描述,长度 128 token
• 模型:6 层 GPT 回归头,输出标量得分
• 损失:pairwise ranking loss
• 训练 3 epoch,单卡 A100 1 h 足够。
阶段 2:PPO 微调
• 策略模型 = SFT 权重
• 价值网络 = RM 最后一层去掉,再训练一个 Critic head
• 运行参数:
-- KL-penalty coefficient β=0.1
-- clip ratio=0.2
-- mini-batch=256,gradient_accumulation=4
-- 总步数 2 000(约 1 h)
• 监控:reward 曲线上升、KL 不超过 0.15 即正常。
阶段 3:评估 & 合并
• 用 BLEU/ROUGE 自动指标 + 3 位药师盲评打分
• 若偏好胜率 ≥ 65 % 即可上线;否则调大 KL 或加数据继续迭代。
- 部署为在线 API
PAI-EAS 两步完成:
-
模型打包
!pai-eas create \ --name molgpt-rlhf \ --processor pytorch1.13 \ --model_path s3://your-bucket/checkpoint/rlhf-final/ \ --instance_type gpu.a100.40g.single \ --min_instance 1 --max_instance 4 -
自动弹性 & 监控
控制台打开"模型在线服务"即可看到 latency/QPS/显卡利用率,支持滚动升级、A/B 灰度。
- 时间与费用总览(参考)
| 阶段 | 资源 | 时长 | 费用(按量) |
|---|---|---|---|
| 数据清洗 | 本地/CPU | 4 h | 0 元 |
| ZINC20 预训练 | 8×A100 | 14 h | ~1200 元 |
| DrugBank SFT | 1×A100 | 1 h | ~90 元 |
| RLHF 三阶段 | 1×A100 | 2 h | ~180 元 |
| EAS 部署 | 1×A100 常驻 | 1 月 | ~5000 元 |
| 合计 | ~6.5 k 元 |
- 常见坑 & 建议
- SMILES 必须统一芳香族写法(小写字母),否则模型会学出两套词汇。
- 预训练阶段把 perplexity 降到 2 以下再进入 SFT,否则 RLHF 很难收敛。
- RLHF 数据量别太少,最少 5 k 对,否则 reward 过拟合,PPO 反而掉点。
- PAI-DLC 可替代 DSW 做分布式训练,只需把
deepspeed配置换成dlc_config.json,其他代码 0 改动。 - 如果 20 万 ZINC20 仍嫌小,可再并公开 100 万"GDB-17"或"PubChem"子集继续预训练,脚本完全一致。
一句话总结
用 PAI 的"DSW(交互式开发)+ DLC(分布式训练)+ EAS(在线服务)"三件套,就能把
ZINC20 自监督 → DrugBank 微调 → 自建奖励模型 + PPO 对齐 的完整闭环在 3 天内跑通,
总 GPU 费用可控制在千元级,且全部云端托管,无需自己搭集群。祝训练顺利,早日上线分子描述生成服务!