阿里云PAI + pytorch大语言模型开发环境简介

2024-04-04 14:44

本文主要是介绍阿里云PAI + pytorch大语言模型开发环境简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 阿里云PAI + pytorch大语言模型开发环境简介
    • PAI-DSW 快速入门
    • 1. 安装和配置
    • 2. 模型训练
      • 2.1 数据集准备
      • 2.2 模型训练脚本准备
      • 2.3 提交训练作业
    • 3. 部署模型为推理服务
    • 4. 调用推理服务

阿里云PAI + pytorch大语言模型开发环境简介

PAI-DSW 快速入门

阿里云机器学习PAI(Platform of Artificial Intelligence) 是集数据管理,模型管理,开发,训练,部署为一体的机器学习平台,并为企业级算法团队和数据科学团队提供了一站式开箱即用的机器学习平台解决方案。主要包括:

可视化建模和分布式训练 PAI-Designer

Notebook交互式AI研发 PAI-DSW(Data Science Workshop)

云原生AI基础平台 PAI-DLC(Deep Learning Containers)

在线预测服务 PAI-EAS(Elastic Algorithm Service)

其中,PAI-DSW是一款在阿里巴巴集团内上百个团队的打磨之下,为数据科学团队和算法团队们量身定制的云端机器学习交互式开发IDE,使读取数据、开发、训练及部署模型更简单高效且安全。

PAI-DSW集成了Jupyterlab、Code-Server等多种开源项目,并从网络与数据上打通了ODPS多种数据源,方便用户在构建模型的时候免去重新构建数据管道的工作。同时支持将开发环境直接保存为容器镜像并发起离线训练任务,为人工智能数字化转型添砖加瓦。

1. 安装和配置

首先通过以下命令安装 PAI Python SDK:

!python -m pip install "alipai>=0.4.4"

随后在命令行终端中配置需要使用的资源,按照引导输入阿里云 AccessKey,并指定使用的工作空间及 OSS Bucket:

# 以下命令,请在 命令行终端 中执行.
python -m pai.toolkit.config

我们可以通过 get_default_session() 来验证 SDK 是否配置成功:

import pai
from pai.session import get_default_sessionprint(pai.__version__)sess = get_default_session()# 获取当前使用的工作空间信息
assert sess.workspace_name is not None
print(sess.workspace_name)

2. 模型训练

现在我们将使用 Pytorch 构建一个简单的模型,通过 (w_1x_1 + w_2x_2^2 + w_3x_3^3 + b) 来拟合正弦函数 (y = \sin(x)).

2.1 数据集准备

首先需要准备用于拟合的数据点作为训练集。我们可以直接在本地构造数据点,保存至 ./data/ 目录下,用于后续模型的训练:

import torch
import math
import os
from pai.common.oss_utils import uploadx = torch.linspace(-math.pi, math.pi, 2000)
y = torch.sin(x)
p = torch.tensor([1, 2, 3])
xx = x.unsqueeze(-1).pow(p)# 将生成的数据点保存为`./data/tensor.pt`
ds_path = './data'
os.makedirs(ds_path, exist_ok=True)
ds = torch.cat((xx, y.reshape(len(xx), -1)), dim=1)
torch.save(ds, ds_path + '/tensor.pt')# 上传至 OSS Bucket 中
ds_uri = upload(ds_path, oss_path="sdk-quickstart/data/", bucket=sess.oss_bucket)

2.2 模型训练脚本准备

现在定义我们的 PyTorch 模型及训练方法,保存为 train.py 文件,并放置在 ./train_src/ 目录下,以便配置后续参数:

import ostrain_src_dir = "./train_src"
os.makedirs(train_src_dir, exist_ok=True)

该脚本是以 PyTorch 官方提供的 PyTorch nn 示例 为基础,修改了:

  • 数据集加载逻辑,从而能加载我们上传到 OSS 中的数据集;

  • 模型保存逻辑,从而训练结束后能将训练好的模型输出至我们的 OSS Bucket,保存到 PAI_OUTPUT_MODEL 指定的路径中.

%%writefile train_src/train.py
# -*- coding: utf-8 -*-~
import torch
import osdef train(model, xx, y):
loss_fn = torch.nn.MSELoss(reduction='sum')
learning_rate = 1e-6
for t in range(2000):
y_pred = model(xx)
loss = loss_fn(y_pred, y)
if t % 100 == 99:
print("Step %d/2000: Loss = %.4f" %(t + 1, loss.item()))
model.zero_grad()
loss.backward()with torch.no_grad():
for param in model.parameters():
param -= learning_rate * param.gradif __name__ == "__main__":
model = torch.nn.Sequential(torch.nn.Linear(3, 1),torch.nn.Flatten(0, 1)
)# 加载我们构造的 `tensor.pt` 数据集
ds_path = os.environ.get("PAI_INPUT_TRAIN_DATA", './data')
ds = torch.load(os.path.join(ds_path, 'tensor.pt'))
xx, y = ds[:, :3], ds[:, 3:]
y = y.reshape((len(y)))train(model, xx, y)# 保存模型为 TorchScript 格式,便于后续部署调用
output_model_path = os.environ.get("PAI_OUTPUT_MODEL", "./model/")
os.makedirs(output_model_path, exist_ok=True)
m = torch.jit.script(model)
m.save(os.path.join(output_model_path, "sinNN.pt"))

这里通过 torch.jit.script() 将模型导出为 TorchScript 格式,从而允许该模型在非 Python 环境,例如 Web 服务器中加载与推理。

2.3 提交训练作业

我们可以通过 Estimator 指定该脚本,以及启动命令、运行环境 (镜像)、机器规格,并通过 fit() 方法来提交该训练作业:

from pai.estimator import Estimator
from pai.image import retrieve# 配置训练作业
est = Estimator(
# 训练作业启动命令
command="python train.py",
# 训练作业代码所在目录,对应目录将被上传到 OSS Bucket 上
source_dir="train_src/",
# 训练作业镜像: 使用 PAI 提供的最新的 PyTorch CPU 镜像
image_uri=retrieve(framework_name="PyTorch", framework_version="latest").image_uri,
# 训练使用的机器实例类型
instance_type="ecs.gn6i-c4g1.xlarge",
# 从训练输出日志中通过 regex 采集 metrics
metric_definitions=[{"Name": "loss","Regex": r".*Loss = ([0-9]*.?[0-9]+(?:[eE][-+]?[0-9]+)?)",},
],
)
# 提交训练作业到 PAI,等待训练完成
est.fit(inputs={# 训练作业的输入数据,每一个 Key,Value 对是一个 Channel,用户可以通过环境变量 PAI_INPUT_{ChannelNameUpperCase} 获取对应的数据路径# 例如以下的 train_data,训练的脚本中可以通过`PAI_INPUT_TRAIN_DATA`获取数据挂载后的路径."train_data": ds_uri,
})
# 查看输出模型的OSS路径
print(est.model_data())

提交作业后,我们可以在命令行终端看到训练作业的 URL,点击该 URL 将跳转到 PAI 控制台,显示该作业的详情。在这里,我们可以跟踪训练指标与日志、查看机器资源使用情况等。

同时本地终端也会持续打印作业的输出日志信息,直到训练作业结束。训练时长在 1 分钟左右。

3. 部署模型为推理服务

训练后的模型会输出到 OSS 中,我们可以通过 est.model_data() 获取模型的输出路径,并创建在线推理服务。

PAI 支持通过 镜像部署 的方式将训练好的模型部署为推理服务,我们只需要额外准备模型服务的代码即可:

# 准备推理代码保存目录
!mkdir -p infer_src
%%writefile infer_src/run.py
from flask import Flask, request
import numpy as np
import torch
import json
import osapp = Flask(__name__)
# 默认模型文件路径
MODEL_PATH = "/eas/workspace/model/"device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = torch.jit.load(os.path.join(MODEL_PATH, "sinNN.pt"), map_location=device).to(device)@app.route("/", methods=["POST"])
def predict():
data = json.loads(request.data)
input_data = torch.tensor(np.array(data), dtype=torch.float32)
pred = model(input_data)
return json.dumps(pred.tolist())if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("LISTENING_PORT", 8000)))

接下来,配置模型推理服务使用的镜像、代码,并创建推理服务对象:

from pai.model import Model, container_serving_spec
from pai.image import retrieve, ImageScopetorch_image = retrieve("PyTorch", framework_version="latest",
image_scope=ImageScope.INFERENCE)inference_spec = container_serving_spec(
# 推理服务的启动命令
command="python run.py",
# 推理服务使用的本地代码路径
source_dir="./infer_src/",
# 使用的推理镜像
image_uri=torch_image.image_uri,
# 使用的第三方依赖
requirements=["flask"
]
)# 2. 使用待部署的模型配置一个Model对象
model = Model(# model_data 可以是OSS Bucket上已有的模型,或是本地路径的模型model_data=est.model_data(),inference_spec=inference_spec,
)# 3. 部署模型到PAI-EAS,创建在线推理服务,返回Predictor对象
p = model.deploy(service_name="example_torch_service",instance_type="ecs.c6.xlarge",
)

4. 调用推理服务

通过 deploy() 方法返回的 Predictor 对象,我们可以通过发送 HTTP 请求的方式调用该推理服务。在 PAI SDK 中,这是通过 predict() 方法:

import numpy as np# 我们的 TorchScript 模型要求输入 type 为 `float32`, shape 为 `(batchSize, 3)`
dummy_input = np.random.rand(10, 3).astype(np.float32)res = p.predict(dummy_input)
print(res)
在测试结束后,记得删除推理服务实例,否则该服务将持续计费:p.delete_service()

这篇关于阿里云PAI + pytorch大语言模型开发环境简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876065

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t