阿里云人工智能平台PAI对接完全指南:从入门到生产级部署
1. 阿里云PAI平台概述
阿里云人工智能平台PAI(Platform of Artificial Intelligence)是一款面向AI开发全生命周期的云原生平台,覆盖了从数据准备、模型训练到模型部署的完整链路。PAI的核心优势在于将底层基础设施的复杂性封装起来,让开发者能够专注于算法创新与业务逻辑实现。
PAI平台由多个核心子产品组成,每个子产品针对AI开发的不同阶段提供专业化能力:
- DSW(Data Science Workshop):云原生IDE,提供Jupyter Notebook和VSCode两种开发环境,适合进行交互式的模型开发和调试。
- DLC(Deep Learning Containers):分布式训练容器服务,支持单机到多机多卡的分布式训练任务,无需手动配置集群环境。
- EAS(Elastic Algorithm Service):模型在线服务,支持将训练完成的模型一键部署为高可用的在线推理服务。
- Designer:可视化建模工具,内置140余种算法组件,通过拖拽方式实现低代码建模。
- Model Gallery:模型仓库,提供大量开源预训练模型的一键部署能力。
理解这些组件的分工是成功对接PAI的第一步。在实际开发中,开发者往往需要组合使用多个子产品——例如在DSW中编写和调试代码,通过DLC提交大规模训练任务,最后将模型部署到EAS提供在线服务。
需要先登录阿里云控制台,点击:阿里云控制台
2. 前置准备:激活PAI与创建工作空间
2.1 激活PAI服务
在开始任何对接操作之前,首先需要激活PAI服务。登录阿里云控制台后,在左上角选择目标地域,进入PAI控制台页面,点击激活按钮即可完成服务开通。激活后,系统会自动创建一个默认的工作空间。建议使用主账号进行激活,以避免因缺少AliyunPAIFullAccess权限策略而导致激活失败。
2.2 创建工作空间
工作空间是PAI进行资源隔离和权限管理的基本单元。一个工作空间可以包含多个DSW实例、DLC训练任务和EAS服务。创建新工作空间时,需要配置以下核心信息:
- 工作空间名称:全局唯一的标识名称
- 地域:选择与业务相近的地域以降低网络延迟
- 关联OSS Bucket:用于存储训练数据和模型文件
工作空间创建完成后,可以通过工作空间列表页面进行成员管理,为不同角色的开发者分配不同的权限。
2.3 RAM权限配置
PAI的权限体系基于阿里云RAM(资源访问管理)构建。无论是通过控制台操作还是通过SDK编程调用,都需要确保使用的RAM账号具备相应的权限。最基本的权限要求包括:
- 工作空间权限:至少具备开发者或管理员角色才能提交训练作业
- OSS权限:需要读写权限以存储代码和模型文件
- EAS权限:需要部署和管理在线服务的权限
如果使用RAM子账号进行操作,建议通过RAM控制台为子账号授予AliyunPAIFullAccess或自定义的策略,而不是直接使用主账号的AccessKey,以遵循最小权限原则保障账号安全。
3. 使用PAI Python SDK进行编程对接
PAI Python SDK是开发者最常用的编程对接方式,它提供了High-Level API,支持在PAI平台上完成从数据上传、模型训练到服务部署的完整流程。
3.1 环境准备与SDK安装
PAI Python SDK要求Python 3.8或更高版本。安装命令如下:
python -m pip install \"alipai>=0.4.0\"如果在安装过程中遇到ModuleNotFoundError类型的错误,可以尝试先升级pip:
pip install --upgrade pip安装完成后,通过以下命令进行初始化配置:
python -m pai.toolkit.config配置向导会依次提示输入以下信息:
- AccessKey ID:阿里云账号的访问密钥ID
- AccessKey Secret:阿里云账号的访问密钥Secret
- Workspace ID:目标工作空间的ID
- Region ID:目标地域(如cn-hangzhou、cn-shanghai等)
- OSS Bucket名称:用于存储训练数据和模型输出的OSS存储桶
配置成功后,系统会显示配置文件的保存路径。
3.2 上传训练数据到OSS
PAI的训练作业需要从OSS读取训练数据。以下示例演示了如何使用PAI SDK将本地MNIST数据集上传到OSS:
from pai.common.oss_utils import upload
from pai.session import get_default_session
sess = get_default_session()
data_uri = upload(
\"./data/\",
oss_path=\"mnist/data/\",
bucket=sess.oss_bucket
)
print(data_uri)除了使用SDK上传外,也可以使用阿里云OSS的命令行工具ossutil进行批量上传:
ossutil cp -rf ./data oss://<YourOssBucket>/mnist/data/3.3 编写适配PAI的训练脚本
训练脚本需要适配PAI的运行环境。PAI在运行训练作业时,会自动将OSS上的数据挂载到容器的指定路径,训练代码可以通过标准的文件读写API访问这些数据。以下是一个适配PAI的PyTorch训练脚本的核心结构:
import os
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
# PAI会自动设置以下环境变量
DATA_DIR = os.environ.get('PAI_INPUT_DATA', '/mnt/data')
OUTPUT_DIR = os.environ.get('PAI_OUTPUT_MODEL', '/mnt/model')
def main():
# 数据加载
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
train_dataset = datasets.MNIST(
DATA_DIR, train=True, download=True, transform=transform
)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
# 模型定义
model = nn.Sequential(
nn.Flatten(),
nn.Linear(784, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
# 训练循环
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
for epoch in range(5):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
# 保存模型到PAI指定的输出目录
torch.save(model.state_dict(), os.path.join(OUTPUT_DIR, 'model.pth'))
if __name__ == '__main__':
main()训练脚本中通过读取环境变量PAI_INPUT_DATA和PAI_OUTPUT_MODEL来获取数据输入路径和模型输出路径,这是PAI训练作业的标准规范。
3.4 提交训练作业
使用Estimator API提交训练作业是PAI SDK的核心功能之一。以下示例演示了如何提交一个PyTorch训练作业:
from pai.estimator import Estimator
from pai.session import get_default_session
sess = get_default_session()
# 构建Estimator
estimator = Estimator(
session=sess,
source_dir=\"./code\", # 训练脚本所在目录
entry_file=\"train.py\", # 入口脚本文件名
framework=\"pytorch\", # 深度学习框架
framework_version=\"1.12\", # 框架版本
instance_type=\"ecs.gn6i-c8g1.2xlarge\", # 实例类型
instance_count=1, # 实例数量
hyperparameters={ # 超参数
'batch_size': 64,
'learning_rate': 0.001,
'epochs': 5
}
)
# 提交训练作业
estimator.fit(
inputs={
'train': 'oss://my-bucket/mnist/data/' # 训练数据路径
}
)fit方法提交作业后,SDK会打印训练作业的控制台URL,并持续输出作业的日志信息,直到训练作业结束。训练完成后,模型文件会自动保存到Estimator配置中指定的OSS路径。
4. 模型部署:EAS在线服务对接
模型训练完成后,下一步是将模型部署为可调用的在线服务。PAI的EAS(Elastic Algorithm Service)提供了多种部署方式,以适应不同的使用场景。
4.1 控制台一键部署
对于希望快速验证模型效果的场景,可以通过PAI控制台进行一键部署。登录PAI控制台后,进入目标工作空间,在左侧导航栏点击\"模型在线服务(EAS)\",然后点击\"部署服务\"。EAS支持多种部署入口:
- Model Gallery部署:从预置的开源模型库中选择模型一键部署
- LLM大语言模型部署:针对大语言模型的场景化部署
- 自定义部署:使用自定义镜像或预置镜像部署自己的模型
部署完成后,可以在服务详情页的\"概览\"页签查看调用信息,包括访问地址(Endpoint)和Token。
4.2 使用Python SDK部署模型
PAI Python SDK提供了High-Level的部署API,支持通过编程方式将模型部署到EAS。以下示例演示了如何部署一个训练完成的模型:
from pai.model import Model
from pai.session import get_default_session
sess = get_default_session()
# 加载模型
model = Model(
model_data=\"oss://my-bucket/models/my_model/\",
session=sess
)
# 部署为在线服务
predictor = model.deploy(
service_name=\"my-first-service\",
instance_type=\"ecs.g6.xlarge\",
options={
\"metadata.region\": \"cn-hangzhou\"
}
)
print(f\"Service endpoint: {predictor.endpoint}\")4.3 自定义镜像部署
当预置镜像无法满足业务需求时,EAS支持使用自定义镜像进行部署。自定义镜像需要包含操作系统、基础库(如CUDA)、语言环境(如Python)以及必要的业务依赖。代码和模型文件推荐存储在OSS或NAS中,在部署时通过挂载方式加载。
通过控制台进行自定义镜像部署时,在\"自定义模型部署\"区域选择\"自定义部署\",然后配置镜像地址、模型文件路径和资源规格等参数。
4.4 调用推理服务
部署完成后,可以通过多种方式调用推理服务。以下是通过Python的requests库调用的示例:
import requests
import json
# 从EAS服务详情页获取
endpoint = \"http://xxxxxx.cn-hangzhou.pai-eas.aliyuncs.com\"
token = \"your-token-here\"
headers = {
\"Authorization\": f\"Bearer {token}\",
\"Content-Type\": \"application/json\"
}
data = {
\"inputs\": [{
\"name\": \"input\",
\"shape\": [1, 784],
\"datatype\": \"FP32\",
\"data\": [0.1] * 784
}]
}
response = requests.post(
f\"{endpoint}/v1/models/my-model:predict\",
headers=headers,
data=json.dumps(data)
)
print(response.json())对于支持OpenAI协议的大语言模型服务,还可以使用OpenAI SDK进行调用:
from openai import OpenAI
client = OpenAI(
base_url=\"http://xxxxxx.cn-hangzhou.pai-eas.aliyuncs.com/v1\",
api_key=\"your-token-here\"
)
response = client.chat.completions.create(
model=\"qwen\",
messages=[
{\"role\": \"user\", \"content\": \"你好,请介绍一下自己\"}
]
)
print(response.choices[0].message.content)5. 数据源对接
PAI平台支持与多种数据源进行无缝对接,包括OSS、MaxCompute、DataWorks等,构成了完整的数据生态。
5.1 OSS数据对接
OSS是PAI最常用的数据存储服务。PAI平台集成了OSS Connector for AI/ML,支持在PyTorch代码中直接流式读取OSS文件,无需提前下载数据至训练环境,从而节省GPU等待时间和存储成本。PAI训练作业还支持通过挂载方式使用OSS,训练代码可以通过标准的POSIX API以读写本地文件的方式读写OSS上的数据。
在提交训练作业时,通过inputs参数指定OSS路径即可让训练作业自动挂载对应的OSS数据。
5.2 MaxCompute数据对接
对于大规模结构化数据的处理场景,PAI可以与MaxCompute(阿里云大数据计算服务)深度集成。在PAI的子产品(DLC或DSW)中,可以通过两种方式读写MaxCompute数据:
- PyODPS:MaxCompute官方提供的Python SDK
- paiio:PAI自主研发的MaxCompute数据读写模块
使用paiio模块读写MaxCompute表数据之前,需要配置MaxCompute账户的AccessKey信息。PAI支持从配置文件读取这些配置信息,可以将配置文件放置在挂载的文件系统中,然后在代码中通过环境变量引用。
此外,MaxCompute的AI_GENERATE函数可以直接调用部署在PAI EAS上的模型,实现用SQL语句处理非结构化数据的能力。这种方案让数据分析师无需编写复杂的Python代码即可调用AI模型。
5.3 DataWorks工作流对接
PAI Designer支持与DataWorks互通,通过DataWorks可以实现离线工作流的定时调度,周期性地更新模型。具体操作流程如下:
- 在PAI Designer中完成工作流的构建和调试
- 在DataWorks中创建PAI Designer调度节点
- 配置调度属性(如调度周期、依赖关系等)
- 发布并运行调度任务
这种集成方式特别适合需要定期训练和更新模型的生产环境,例如每日自动执行的推荐模型训练任务。
6. 进阶对接:PrivateLink私网访问与连接管理
6.1 PrivateLink私网访问
对于安全要求较高的生产环境,PAI支持通过PrivateLink(私网连接)实现VPC内的私网访问。通过在VPC内创建接口终端节点,实例无需公网IP即可调用PAI API,所有流量在阿里云内网中传输。这种方案的优势在于:
- 避免数据经公网传输带来的安全风险
- 降低网络延迟,提升调用性能
- 减少公网流量费用
配置PrivateLink需要在目标VPC中创建终端节点,并将其与PAI服务建立关联。具体操作步骤可以参考PAI官方文档中的PrivateLink配置指南。
6.2 连接管理(LangStudio)
在PAI的LangStudio中,通过\"连接\"功能可以集中管理各种外部服务的访问配置。支持的连接类型包括:
- 通用LLM模型服务:配置兼容OpenAI协议的LLM服务,支持PAI-EAS模型服务和第三方模型服务
- 通用Embedding模型服务:配置已部署至EAS或第三方的Embedding模型服务
- 数据库连接:管理Elasticsearch、OpenSearch等数据库的访问配置
- 百炼大模型服务:配置百炼平台的API Key
当使用PAI-EAS模型服务时,base_url和api_key会自动填充,分别对应已部署服务的VPC访问地址和Token。这种连接复用机制大幅简化了多服务集成的配置工作。
7. 安全与成本优化
7.1 安全最佳实践
在生产环境中使用PAI时,建议遵循以下安全最佳实践:
- 使用RAM子账号:避免直接使用主账号的AccessKey,为不同角色创建专用的RAM子账号并授予最小权限
- 启用PrivateLink:对于敏感数据的传输,优先使用VPC私网访问
- Token管理:EAS服务的Token应妥善保管,避免硬编码在代码中,建议使用环境变量或密钥管理服务
- 网络隔离:通过安全组和VPC策略控制EAS服务的访问来源
7.2 成本优化策略
PAI采用按量计费模式,主要费用来源于计算资源和存储资源。以下策略有助于控制成本:
- 选择合适的实例规格:根据模型大小和推理延迟要求选择适当的实例类型,避免资源浪费
- 使用 Spot 实例:对于非关键任务的训练,可以考虑使用竞价实例大幅降低成本
- 合理设置自动扩缩容:EAS服务支持根据流量自动调整实例数量,在低峰期减少实例
- 数据存储优化:及时清理不再需要的训练数据和模型文件,避免产生不必要的OSS存储费用
- 利用内网传输:确保PAI作业与OSS Bucket在相同地域,使用内网传输数据免收流量费用
8. 常见问题解答
问题1:PAI Python SDK配置时提示权限不足怎么办?
检查使用的AccessKey对应的RAM账号是否具备目标工作空间的访问权限以及OSS Bucket的读写权限。可以在RAM控制台为账号授予AliyunPAIFullAccess策略,或自定义策略授予更细粒度的权限。
问题2:训练作业提交后一直处于\"等待\"状态是什么原因?
通常是因为资源配额不足导致的。可以检查当前工作空间的资源配额是否还有剩余,或者选择的实例规格在当前地域是否可用。也可以在PAI控制台的资源配额页面查看和调整配额。
问题3:EAS服务部署失败,提示镜像拉取失败怎么办?
检查自定义镜像的地址是否正确,以及镜像是否设置为公开或已授权PAI服务账号访问。如果使用私有镜像仓库,需要在部署配置中提供镜像仓库的访问凭证。
问题4:如何实现跨地域的EAS服务部署?
PAI SDK支持跨地域配置。在初始化Session时指定目标地域的region_id,部署时通过options参数显式指定地域。需要注意的是,跨地域数据传输可能会产生额外的延迟和费用。
问题5:PAI训练作业如何读取MaxCompute中的数据?
可以通过PyODPS或paiio模块在训练脚本中读取MaxCompute表数据。使用前需要配置MaxCompute账户的AccessKey信息,可以通过配置文件或环境变量的方式传入。
问题6:如何监控PAI EAS服务的运行状态?
在PAI控制台的EAS服务详情页面可以查看服务的实时监控数据,包括CPU使用率、内存使用率、请求QPS、响应延迟等指标。此外,也可以将EAS的监控数据接入到阿里云云监控服务,配置告警规则实现异常自动通知。



