基于XTuner和LMDeploy微调和部署llama3

Llama3五一超级课堂作业

本文作为拖拉地微调和部署Llama3的记录,供学习参考,原开发文档查看https://github.com/SmartFlowAI/Llama3-Tutorial/tree/main

VSCode配置

在VSCode里安装SSH(远程开发必备),生成ssh密钥可以参考生成 SSH 密钥(windows+liunx) - 知乎 (zhihu.com)

在InternStudio开发机配置完SSH公钥后,无需密码输入即可访问开发机。

Llama3 云服务器Web Demo部署

# 创建一个python版本3.10 名称为llama3的conda虚拟环境
# conda指miniconda或anaconda,如本机部署建议安装轻量化的miniconda
conda create -n llama3 python=3.10
# 激活llama3环境
conda activate llama3
# llama3环境安装包
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
conda install git-lfs
git-lfs install
# git中的大文件一般使用git-lfs拉取
git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct

安排好文件目录并下载好Llama-3-8B-Instruct模型权重后

cd ~
# 克隆指导手册,本章大部分内容来自指导手册,笔者进行了部分内容的简单解释
git clone https://github.com/SmartFlowAI/Llama3-Tutorial
cd ~
# 克隆XTuner
git clone -b v0.1.18 https://github.com/InternLM/XTuner
cd XTuner
pip install -e .

运行web demo,运行完成后服务器会在某端口上开启http web服务,vsc配置端口转发后即可访问网页进行对话。

如果头铁想在本机跑本教程或原文档,建议配置有较大显存的显卡(本地6G的3060laptop挂了)。

streamlit run ~/Llama3-Tutorial/tools/internstudio_web_demo.py \
  ~/model/Meta-Llama-3-8B-Instruct
# 服务器将模型参数下载在root/model/Meta-Llama-3-8B-Instruct中,故参数如此设置

请添加图片描述
请添加图片描述

其他技术路线还有ollama+openwebUI、vLLM等。

XTuner 微调 Llama3 个人小助手认知

环境配置、模型下载、指导手册下载不再赘述。

以下命令使用的py脚本会生成自我认识更新微调数据集,但是使用该py脚本生成的微调数据集进行微调会导致模型坍塌(对于任何问题均回答我是balabala),个人肤浅觉得是一种大模型的灾难性遗忘。解决灾难性遗忘具体可以学习持续学习、增量学习这些课题。

cd ~/Llama3-Tutorial
python tools/gdata.py 

然后拿XTuner微调模型

cd ~/Llama3-Tutorial

# 开始训练,使用 deepspeed 加速,A100 40G显存 耗时24分钟
xtuner train configs/assistant/llama3_8b_instruct_qlora_assistant.py --work-dir /root/llama3_pth

# Adapter PTH 转 HF 格式
xtuner convert pth_to_hf /root/llama3_pth/llama3_8b_instruct_qlora_assistant.py \
  /root/llama3_pth/iter_500.pth \
  /root/llama3_hf_adapter

# 模型合并
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert merge /root/model/Meta-Llama-3-8B-Instruct \
  /root/llama3_hf_adapter\
  /root/llama3_hf_merged

在streamlit上对微调后的模型参数进行验证,模型G了。使用更高质量的自我认知数据集,微调结果可能不一样。

streamlit run ~/Llama3-Tutorial/tools/internstudio_web_demo.py \
  /root/llama3_hf_merged

请添加图片描述

LMDeploy 高效部署 Llama3 实践

可能是InternStudio开发机的容器被我玩坏了,无法再进行LMDeploy部署。本节参照InternStudio的文档,在autoDL进行部署测试。

请添加图片描述

可以直接访问以下网页在AutoDL创建实例,省去前期所有环境配置。开发机中的llama3 conda环境包含了部署所需要的包内容。
CodeWithGPU | 能复现才是好算法

注意autoDL的数据盘为~/autodl-tmp/,若下载llama3模型参数到其他位置会导致系统盘满!我直接在~/autodl-tmp/下克隆了模型的参数

git clone https://code.openxlab.org.cn/MrCat/Llama-3-8B-Instruct.git Meta-Llama-3-8B-Instruct
# 激活conda环境
# 如果不知道开发机有什么conda环境,可以使用conda env list查看
conda activate llama3
lmdeploy chat ~/autodl-tmp/Meta-Llama-3-8B-Instruct

使用LMDeploy支持的--cache-max-entry-count参数限制KVcache占用的显存,可以优化部署时显存消耗,但是会提高响应时延(虽然单机感知不深)。

lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.5
lmdeploy chat /root/model/Meta-Llama-3-8B-Instruct/ --cache-max-entry-count 0.01

请添加图片描述
请添加图片描述

# 离线量化因奇怪报错未能解决,故未能实现
lmdeploy lite auto_awq \
   ~/autodl-tmp/Meta-Llama-3-8B-Instruct \
  --calib-dataset 'ptb' \
  --calib-samples 128 \
  --calib-seqlen 1024 \
  --w-bits 4 \
  --w-group-size 128 \
  --work-dir ~/autodl-tmp/Meta-Llama-3-8B-Instruct_4bit

在线量化:LMDeploy 规定 qant_policy=4表示 kv int4 量化,quant_policy=8 表示 kv int8 量化。

启动API服务器,server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。使用vscode进行端口转发后就可以在本机访问API了

lmdeploy serve api_server \
    ~/autodl-tmp/Meta-Llama-3-8B-Instruct \
    --model-format hf \
    --quant-policy 0 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

使用命令行访问API服务器

lmdeploy serve api_client http://localhost:23333

请添加图片描述

通过conda list发现llama3环境中已安装指定版本的gradio,故直接新开一个终端,执行以下命令,即可通过gradioUI进行对话。

conda activate llama3
lmdeploy serve gradio http://localhost:23333 \
    --server-name 0.0.0.0 \
    --server-port 6006

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值