阿里云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

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate