快速玩转 Mixtral 8x7B MOE大模型,阿里云机器学习 PAI 推出最佳实践

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 本文介绍如何在PAI平台针对Mixtral 8x7B大模型的微调和推理服务的最佳实践,助力AI开发者快速开箱。以下我们将分别展示具体使用步骤。

1.背景


Mixtral 8x7B大模型是Mixtral AI推出的基于decoder-only架构的稀疏专家混合网络(Mixture-Of-Experts,MOE)开源大语言模型。这一模型具有46.7B的总参数量,对于每个token,路由器网络选择八组专家网络中的两组进行处理,并且将其输出累加组合,在增加模型参数总量的同时,优化了模型推理的成本。在大多数基准测试中,Mixtral 8x7B模型与Llama2 70B和GPT-3.5表现相当,因此具有很高的使用性价比。

阿里云人工智能平台PAI是面向开发者和企业的机器学习/深度学习平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务。

本文介绍如何在PAI平台针对Mixtral 8x7B大模型的微调和推理服务的最佳实践,助力AI开发者快速开箱。以下我们将分别展示具体使用步骤。


2.具体步骤


2.1使用PAI-DSW轻量化微调Mixtral 8x7B MOE大模型

PAI-DSW是云端机器学习开发IDE,为用户提供交互式编程环境,同时提供了丰富的计算资源。我们在智码实验室(https://gallery.pai-ml.com/)Notebook Gallery中上线了两个微调Mixtral 8x7B MOE大模型的示例,参见下图:

image.png

上述Notebook可以使用阿里云PAI-DSW的实例打开,并且需要选择对应的计算资源和镜像。

2.2使用Swift轻量化微调Mixtral 8x7B MOE大模型

Swift是魔搭ModelScope开源社区推出的轻量级训练推理工具开源库,使用Swift进行这一大模型LoRA轻量化微调需要使用2张A800(80G)及以上资源。在安装完对应依赖后,我们首先下载模型至本地:

!apt-getupdate!echoy|apt-getinstallaria2defaria2(url, filename, d):
!aria2c--console-log-level=error-c-x16-s16 {url} -o {filename} -d {d}
mixtral_url="http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/mixtral/Mixtral-8x7B-Instruct-v0.1.tar"aria2(mixtral_url, mixtral_url.split("/")[-1], "/root/")
!cd/root&&mkdir-pAI-ModelScope!cd/root&&tar-xfMixtral-8x7B-Instruct-v0.1.tar-C/root/AI-ModelScopeimportosos.environ['MODELSCOPE_CACHE']='/root'

当模型下载完毕后,我们使用Swift一键拉起训练任务:

!cdswift/examples/pytorch/llm&&PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0,1 \
pythonllm_sft.py \
--model_id_or_pathAI-ModelScope/Mixtral-8x7B-Instruct-v0.1 \
--model_revisionmaster \
--sft_typelora \
--tuner_backendswift \
--dtypeAUTO \
--output_dir/root/output \
--ddp_backendnccl \
--datasetalpaca-zh \
--train_dataset_sample100 \
--num_train_epochs2 \
--max_length2048 \
--check_dataset_strategywarning \
--lora_rank8 \
--lora_alpha32 \
--lora_dropout_p0.05 \
--lora_target_modulesALL \
--batch_size1 \
--weight_decay0.01 \
--learning_rate1e-4 \
--gradient_accumulation_steps16 \
--max_grad_norm0.5 \
--warmup_ratio0.03 \
--eval_steps300 \
--save_steps300 \
--save_total_limit2 \
--logging_steps10 \
--only_save_modeltrue \
--gradient_checkpointingfalse

模型训练完成后,我们将学习到的LoRA权重合并到模型Checkpoint中:

!swiftmerge-lora--ckpt_dir'/root/output/mistral-7b-moe-instruct/v3-20231215-111107/checkpoint-12'

其中,ckpt_dir参数的值需要替换成模型LoRA权重保存路径。为了测试模型训练的正确性,我们可以使用transformers库进行离线推理测试:

fromtransformersimportAutoModelForCausalLM, AutoTokenizermodel_id="/root/output/mistral-7b-moe-instruct/v3-20231215-111107/checkpoint-12-merged"tokenizer=AutoTokenizer.from_pretrained(model_id, device_map='auto')
model=AutoModelForCausalLM.from_pretrained(model_id, device_map='auto')
text="""[INST] <<SYS>>You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.<</SYS>>写一首歌的过程从开始到结束。 [/INST]"""inputs=tokenizer(text, return_tensors="pt")
outputs=model.generate(**inputs, max_new_tokens=512)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

2.3使用Deepspeed轻量化微调Mixtral 8x7B MOE大模型

我们也可以使用Deepspeed对Mixtral 8x7B MOE大模型进行LoRA轻量化微调。同样的,我们需要使用2张A800(80G)及以上资源。我们首先下载模型至本地:

!apt-getupdate!echoy|apt-getinstallaria2defaria2(url, filename, d):
!aria2c--console-log-level=error-c-x16-s16 {url} -o {filename} -d {d}
mixtral_url="http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/mixtral/Mixtral-8x7B-Instruct-v0.1.tar"aria2(mixtral_url, mixtral_url.split("/")[-1], "/root/")
!cd/root&&tar-xfMixtral-8x7B-Instruct-v0.1.tar

第二步,我们下载一个示例古诗生成数据集,用户可以根据下述数据格式准备自己的数据集。

!wget-chttps://pai-quickstart-predeploy-hangzhou.oss-cn-hangzhou.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_train_mixtral.json!wget-chttps://pai-quickstart-predeploy-hangzhou.oss-cn-hangzhou.aliyuncs.com/huggingface/datasets/llm_instruct/en_poetry_test_mixtral.json

第三步,我们可以修改示例命令的超参数,并且拉起训练任务。

!mkdir-p/root/output!deepspeed/ml/code/train_sft.py \
--model_name_or_path/root/Mixtral-8x7B-Instruct-v0.1/ \
--train_pathen_poetry_train_mixtral.json \
--valid_pathen_poetry_test_mixtral.json \
--learning_rate1e-5 \
--lora_dim32 \
--max_seq_len256 \
--modelmixtral \
--num_train_epochs1 \
--per_device_train_batch_size8 \
--zero_stage3 \
--gradient_checkpointing \
--print_loss \
--deepspeed \
--output_dir/root/output/ \
--offload

当训练结束后,我们拷贝额外配置文件至输出文件夹:

!cp/root/Mixtral-8x7B-Instruct-v0.1/generation_config.json/root/output!cp/root/Mixtral-8x7B-Instruct-v0.1/special_tokens_map.json/root/output!cp/root/Mixtral-8x7B-Instruct-v0.1/tokenizer.json/root/output!cp/root/Mixtral-8x7B-Instruct-v0.1/tokenizer.model/root/output!cp/root/Mixtral-8x7B-Instruct-v0.1/tokenizer_config.json/root/output

我们同样可以使用transformers库进行离线推理测试:

importosfromtransformersimportAutoModelForCausalLM, AutoTokenizerimporttorchmodel_id="/root/output/"tokenizer=AutoTokenizer.from_pretrained(model_id)
model=AutoModelForCausalLM.from_pretrained(model_id,device_map='auto',torch_dtype=torch.float16)
text="""[INST] Write a poem on a topic 'Care for Thy Soul as Thing of Greatest Price': [/INST]"""inputs=tokenizer(text, return_tensors="pt").to('cuda')
outputs=model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

如果用户需要将上述模型部署为EAS服务,需要将格式转换成safetensors格式:

state_dict=model.state_dict()
model.save_pretrained(
model_id,
state_dict=state_dict,
safe_serialization=True)

2.4使用PAI-EAS在线部署Mixtral 8x7B MOE大模型

PAI-EAS是PAI平台推出的弹性推理服务,可以将各种大模型部署为在线服务。当Mixtral 8x7B MOE大模型微调完毕后,我们可以将其部署为PAI-EAS服务。这里,我们介绍使用PAI-SDK将上述模型进行部署。首先,我们在PAI-DSW环境安装PAI-SDK:

!python-mpipinstallalipai==0.4.4.post0

在安装完成后,在在命令行终端上执行以下命令,按照引导完成配置AccessKey、PAI工作空间以及 OSS Bucket:

python-mpai.toolkit.config

我们将训练好的模型上传至OSS Bucket。在下述命令中,source_path为模型Checkpoint保存的本地路径,oss_path为上传至OSS的目标路径:

importpaifrompai.sessionimportget_default_sessionfrompai.common.oss_utilsimportuploadprint(pai.__version__)
sess=get_default_session()
model_uri=upload(
source_path="/root/output", oss_path="mixtral-7b-moe-instruct-sft-ds", bucket=sess.oss_bucket)
print(model_uri)

我们根据下述模版配置EAS服务的Config,并且进行服务的部署:

config= {
"containers": [
        {
"image": "pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/llm-inference:vllm-0.2.4-v2",
"port": 8081,
"script": "python -m vllm.entrypoints.api_server --model /model --tensor-parallel-size 2 --gpu-memory-utilization 0.95 --port 8081 --dtype half"        }
    ],
"metadata": {
"cpu": 40,
"gpu": 2,
"instance": 1,
"memory": 256000,
"quota_id": "",
"quota_type": "Lingjun",
"resource_burstable": False,
"rpc": {
"keepalive": 500000        },
"workspace_id": ""    },
"storage": [
        {
"empty_dir": {
"medium": "memory",
"size_limit": 24            },
"mount_path": "/dev/shm"        },
        {
"mount_path": "/model",
"oss": {
"path": "oss://example-bucket/mixtral-7b-moe-instruct-sft-ds/",
"readOnly": False            },
"properties": {
"resource_type": "model"            }
        }
    ]
} 
frompai.modelimportModelm=Model().deploy(
service_name='mixtral_sdk_example_ds',
options=config)

其中,oss.path配置为mixtral模型在OSS上的目录,示例会把oss://example-bucket/mistral-7b-moe-instruct-sft/挂载至/model。metadata.quota_id、metadata.workspace_id根据当前用户的实际情况进行调整,注意确保配置的AK所属用户具备当前工作空间权限。

当服务部署完成后,使用Python脚本调用EAS服务,其中url和authorization需要改成当前EAS服务的url和token:

# coding: utf8importrequestsimportjsonimportwarningsurl='http://*****/generate'h= {
'Authorization': '*****'    }
d= {
"prompt": text,
"use_beam_search": False,
"stream": True,
"n": 1,
"temperature": 0.0,
"max_tokens": 860,
    }
text_pre=""withrequests.post(url=url, headers=h, json=d,stream=True) asr:
try:
forchunkinr.iter_lines(chunk_size=8192,
decode_unicode=False,
delimiter=b"\0"):
ifchunk:
data=json.loads(chunk.decode("utf-8"))
output=data["text"]
whileoutput[0][-1]=='�':
output[0]=output[0][:-1]
text_ex=output[0].replace(text_pre,"").replace(text,"")
iflen(text_pre)<len(output[0]):
text_pre=output[0]
print(text_ex, end="", flush=True) 
exceptExceptionasex:
print(f"{str(ex)}")

2.5使用PAI-QuickStart零代码玩转Mixtral 8x7B MOE大模型

快速开始(PAI-QuickStart)集成了国内外AI开源社区中优质的预训练模型,支持零代码实现微调和部署Mixtral 8x7B MOE大模型,用户只需要根据格式上传训练集和验证集,填写训练时候使用的超参数就可以一键拉起训练任务。Mixtral的模型卡片如下图所示:

image.png

我们可以根据实际需求上传训练集和验证集,调整超参数,例如learning_rate、sequence_length、train_iters等,如下所示:

image.png

点击“训练”按钮,PAI-QuickStart开始进行训练,用户可以查看训练任务状态和训练日志,如下所示:

image.png

如果需要将模型部署至PAI-EAS,可以在同一页面的模型部署卡面选择资源组,并且点击“部署”按钮实现一键部署。模型调用方式和上文PAI-EAS调用方式相同。

image.png




相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
8天前
|
人工智能 JSON 算法
魔搭支持在阿里云人工智能平台PAI上进行模型训练、部署了!
现在,魔搭上的众多模型支持在阿里云人工智能平台PAI-Model Gallery上使用阿里云算力资源进行模型训练和部署啦!
|
2天前
|
人工智能 自然语言处理 安全
通过阿里云Milvus与PAI搭建高效的检索增强对话系统
阿里云向量检索Milvus版是一款全托管的云服务,兼容开源Milvus并支持无缝迁移。它提供大规模AI向量数据的相似性检索服务,具备易用性、可用性、安全性和低成本等优势,适用于多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等场景。用户可通过PAI平台部署RAG系统,创建和配置Milvus实例,并利用Attu工具进行可视化操作,快速开发和部署应用。使用前需确保Milvus实例和PAI在相同地域,并完成相关配置与开通服务。
|
21天前
|
开发者 Python
阿里云PAI DSW快速部署服务
在使用阿里云DSW实例进行开发的时候,可能需要快速部署服务测试应用效果。DSW实例目前已经支持通过自定义服务访问配置功能,对外提供服务访问能力,您在应用开发过程中无需分享整个DSW实例,即可将服务分享给协作开发者进行测试和验证。
72 23
|
6天前
|
并行计算 PyTorch 算法框架/工具
阿里云PAI-部署Qwen2-VL-72B
阿里云PAI-部署Qwen2-VL-72B踩坑实录
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
【NeurIPS'24】阿里云 PAI 团队论文被收录为 Spotlight,并完成主题演讲分享
12月10日,NeurIPS 2024在温哥华开幕,阿里云PAI团队论文《PertEval: Unveiling Real Knowledge Capacity of LLMs with Knowledge-Invariant Perturbations》入选Spotlight,PAI团队还进行了“可信AI的技术解读与最佳实践”主题演讲,展示AI工程化平台产品能力。
|
8月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
261 14
|
8月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
146 1
|
8月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
8月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
367 0
|
8月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
1044 0

相关产品

  • 人工智能平台 PAI