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

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 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)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
20天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的五大技巧
【4月更文挑战第7天】 在数据科学迅猛发展的今天,机器学习已成为解决复杂问题的重要工具。然而,构建一个既精确又高效的机器学习模型并非易事。本文将分享五种提升机器学习模型性能的有效技巧,包括数据预处理、特征工程、模型选择、超参数调优以及交叉验证。这些方法不仅能帮助初学者快速提高模型准确度,也为经验丰富的数据科学家提供了进一步提升模型性能的思路。
|
24天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的最佳实践
【4月更文挑战第3天】在数据驱动的时代,构建高效的机器学习模型已成为解决复杂问题的关键。本文将探讨一系列实用的技术策略,旨在提高模型的性能和泛化能力。我们将从数据预处理、特征工程、模型选择、超参数调优到集成学习等方面进行详细讨论,并通过实例分析展示如何在实践中应用这些策略。
17 1
|
4天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型的最佳实践
【4月更文挑战第23天】在数据驱动的时代,机器学习已成为创新的核心动力。本文深入探讨了构建高效机器学习模型的关键步骤,包括数据预处理、特征工程、模型选择、训练技巧以及性能评估。通过实例分析与经验总结,旨在为从业者提供一套实用的技术指南,帮助他们在复杂数据环境中提升模型的准确性和泛化能力。
|
2天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【4月更文挑战第25天】 在数据驱动的时代,机器学习已成为创新和效率提升的关键工具。本文将探讨一系列实用的策略和技术,旨在帮助读者构建出更高效、更精确的机器学习模型。我们将从数据处理开始,讨论特征选择的重要性以及如何避免过拟合,接着深入到模型选择与优化,最后讨论模型部署和维护的实践要点。通过遵循这些最佳实践,读者能够提升其机器学习项目的成功率并实现更好的业务成果。
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
30 12
|
9天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
31 7
|
10天前
|
机器学习/深度学习 算法 数据处理
构建自定义机器学习模型:Scikit-learn的高级应用
【4月更文挑战第17天】本文探讨了如何利用Scikit-learn构建自定义机器学习模型,包括创建自定义估计器、使用管道集成数据处理和模型、深化特征工程以及调优与评估模型。通过继承`BaseEstimator`和相关Mixin类,用户可实现自定义算法。管道允许串联多个步骤,而特征工程涉及多项式特征和自定义变换。模型调优可借助交叉验证和参数搜索工具。掌握这些高级技巧能提升机器学习项目的效果和效率。
|
11天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从特征工程到模型调优
【4月更文挑战第16天】 在数据驱动的时代,机器学习已成为解决复杂问题的关键工具。本文旨在分享一套实用的技术流程,帮助读者构建高效的机器学习模型。我们将重点讨论特征工程的重要性、选择合适算法的策略,以及通过交叉验证和网格搜索进行模型调优的方法。文章的目标是为初学者提供一个清晰的指南,同时为有经验的实践者提供一些高级技巧。
|
11天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
16 0
|
17天前
|
机器学习/深度学习 JavaScript 前端开发
机器学习模型部署:使用Python和Vue搭建用户友好的预测界面
【4月更文挑战第10天】本文介绍了如何使用Python和Vue.js构建机器学习模型预测界面。Python作为机器学习的首选语言,结合Vue.js的前端框架,能有效部署模型并提供直观的预测服务。步骤包括:1) 使用Python训练模型并保存;2) 创建Python后端应用提供API接口;3) 利用Vue CLI构建前端项目;4) 设计Vue组件实现用户界面;5) 前后端交互通过HTTP请求;6) 优化用户体验;7) 全面测试并部署。这种技术组合为机器学习模型的实用化提供了高效解决方案,未来有望更加智能和个性化。

热门文章

最新文章