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