在启智社区使用MindFormers本地部署大模型(未解决)
在启智社区使用MindFormers本地部署大模型非常简单方便,因为启智社区已经提供了NPU算力环境,不需要自己再去配置和调试了。
MindSpore Transformers即MindFormers套件的目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性。期望帮助用户轻松的实现大模型训练和创新研发。官网:https://gitee.com/mindspore/mindformers 简单介绍参见:使用MindFormers本地部署大模型_mindformer 单机多卡-CSDN博客
在启智社区使用MindFormers本地部署大模型非常简单方便,因为启智社区已经提供了NPU算力环境,不需要自己再去配置和调试了。
在启智社区新建云脑(AI)任务:
选择你需要创建的任务类型,这里我们选择新建调试任务,
创建MindSpore2.2调试任务
算力集群默认且只能选:
计算资源选:昇腾NPU
资源规格选:华为昇腾NPU算力 Ascend 910
镜像选:mindspore_2_2_cann7_cb2_caai
然后点新建任务,即可。
任务创建完成后,即可开始调试
2.2调试任务开始
进入jupyter环境后,可以开始AI任务。
首先安装MindFormers
!pip install mindformers==1.0
因为MindFormers对MindSpore有版本对应的限制,这里的MindSpore是2.2版本,所以这里需要安装MindFormers1.0版本。
安装完成后,可以参考这篇文档进行大模型的推理:昇思MindSpore AI框架MindFormers实践3:ChatGLM3-6B对一段文字进行提取-CSDN博客
升级到MindSpore2.3版本(失败)
如果条件允许,想安装MindFormers最新版本,则对需要安装MindSpore2.3版本
在2.2版本下尝试升级安装MindSpore2.3:
!pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.3.1/MindSpore/unified/aarch64/mindspore-2.3.1-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install mindformers
升级失败,大约是因为不同的MindSpore是跟CANN等NPU的版本是绑定的。
后来发现启智社区提供MindSpore2.3版本的环境,直接创建即可。
创建MindSpore2.3版本并安装mindformers
启智AI调试环境,创建的时候选择MindSpore2.3版本。
进入环境后,使用pip 安装MindFormers,发现import mindformers报错,具体见后面调试部分。
问题未解决。
怀疑是python3.9版本不支持MindFormers,于是:
2.3版本下装python3.10再装mindspore+MindFormers
基本确定问题,可能是python3.9的问题,于是在启智的mindspore2.3环境下,重新安装python3.10环境,并安装 mindspore+mindformers
去清华源下载python3.10并安装
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_24.7.1-0-Linux-aarch64.sh
sh Miniconda3-py310_24.7.1-0-Linux-aarch64.sh
安装mindspore2.3版本
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.3.1/MindSpore/unified/aarch64/mindspore-2.3.1-cp310-cp310-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
安装MindFormers
pip install mindformers
推理案例
glm推理
# !cd mindformers && bash scripts/examples/glm3/run_glm3_predict.sh single /tmp/code/mindformers/output/glm3_6b.yaml /tmp/code/mindformers/output/msckpt.ckpt
!cd mindformers && bash scripts/examples/glm3/run_glm3_predict.sh single \
configs/glm3/predict_glm3_6b.yaml \
output/glm3_6b.ckpt
API推理
import mindspore
from mindformers import AutoConfig, AutoModel, AutoTokenizer
# 指定图模式,指定使用训练卡id
mindspore.set_context(mode=0, device_id=0)
# tokenizer = AutoTokenizer.from_pretrained('chatglm2_6b')
tokenizer = AutoTokenizer.from_pretrained('llama2_7b')
# model的实例化有以下两种方式,选择其中一种进行实例化即可
# 1. 直接根据默认配置实例化
model = AutoModel.from_pretrained('glm2_6b')
# 2. 自定义修改配置后实例化
config = AutoConfig.from_pretrained('glm2_6b')
config.use_past = True # 此处修改默认配置,开启增量推理能够加速推理性能
# config.xxx = xxx # 根据需求自定义修改其余模型配置
model = AutoModel.from_config(config) # 从自定义配置项中实例化模型
inputs = tokenizer("你好")["input_ids"]
# 首次调用model.generate()进行推理将包含图编译时间,推理性能显示不准确,多次重复调用以获取准确的推理性能
outputs = model.generate(inputs, max_new_tokens=20, do_sample=True, top_k=3)
response = tokenizer.decode(outputs)
print(response)
# ['你好,作为一名人工智能助手,我欢迎您随时向我提问。']
GPT2推理
from mindformers import GPT2Tokenizer
from mindspore.dataset import GeneratorDataset
import mindspore as ms
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
class TextSet:
def __init__(self, tokenizer):
with open('/code/debug.txt', 'r') as f:
self.content = f.read().replace('\n', '').split('。')
self.tokenizer = tokenizer
def __getitem__(self, idx):
input_ids = self.tokenizer(
self.content[idx],
padding='max_length',
max_length=1025,
return_tensors='ms')
return input_ids['input_ids'].astype(ms.int32)
def __len__(self):
return len(self.content)
txtset = TextSet(tokenizer)
dataset = GeneratorDataset(source=txtset, column_names=['input_ids'])
from mindarmour.privacy.diff_privacy import DPOptimizerClassFactory
from mindformers import AutoModel
model = AutoModel.from_pretrained("gpt2")
GaussianSGD = DPOptimizerClassFactory(micro_batches=2)
GaussianSGD.set_mechanisms('Gaussian', norm_bound=1.0, initial_noise_multiplier=1.5)
opt = GaussianSGD.create('Momentum')(params=model.trainable_params(),
learning_rate=0.001,
momentum=0.911)
from mindformers.trainer import Trainer
# 初始化预训练任务
trainer = Trainer(
task='text_generation',
model=model,
train_dataset=dataset.batch(4),
optimizers=opt)
# 方式1: 开启训练,并使用训练好的权重进行推理
trainer.train()
llama推理
!cd mindformers && bash scripts/examples/llama2/run_llama2_predict.sh single \
configs/llama2/predict_llama2_7b.yaml \
output/llama2_7b.ckpt
T5sql推理
import mindspore
from mindformers import T5ForConditionalGeneration, T5Tokenizer
# model_path = './'
# t5 = T5ForConditionalGeneration.from_pretrained(model_path)
t5 = T5ForConditionalGeneration.from_pretrained("t5_small")
tokenizer = T5Tokenizer.from_pretrained("t5_small")
t5.set_train(False)
mindspore.set_context(mode=1, device_id=0)
def generate_SQL(text):
text = "translate English to SQL: %s </s>" % text
inputs = tokenizer(text)
outputs = t5.generate(inputs["input_ids"],do_sample=False)
response = tokenizer.decode(outputs,skip_special_tokens=True)[0]
return response
description="请输入英文需求,自动生成SQL语句。\n 例如:Search for the names of all employees over the age of 30。"
inputs = input(description)
output = generate_SQL(inputs)
print (output)
while True:
inputs = input(description)
if inputs=="q" or inputs=="0" :
break
output = generate_SQL(inputs)
print(output)
总结
MindSpore2.2环境+MindFormers1.0是可以推理成功的,见:昇思MindSpore AI框架MindFormers实践3:ChatGLM3-6B对一段文字进行提取-CSDN博客
MindSpore2.3环境+MindFormers1.2没有推理成功,大约是python3.9版本不够的原因,因为官网文档中写到
当前套件建议使用的Python版本为3.10
调试
import mindformers报错:
ImportError: cannot import name 'swap_cache' from 'mindspore._c_expression' (/home/ma-user/anaconda3/envs/MindSpore/lib/python3.9/site-packages/mindspore/_c_expression.cpython-39-aarch64-linux-gnu.so)
针对这个报错,修改文件:
/home/ma-user/anaconda3/envs/MindSpore/lib/python3.9/site-packages/mindformers/tools/utils.py
将文件中的这句:from mindspore._c_expression import swap_cache 注释掉即可。
若在其它文件中也碰到这样的报错,也是修改文件代码即可。
更多推荐
所有评论(0)