GPT大语言模型Alpaca-lora本地化部署实践
Tech导读
大模型技术日新月异,开源大模型层出不穷,本文针对开源大模型Alpaca-lora进行本地化部署实践,探索大模型在部署和使用方面的细节。
导读
大模型技术日新月异,开源大模型层出不穷,本文针对开源大模型Alpaca-lora进行本地化部署实践,探索大模型在部署和使用方面的细节。01 模型介绍
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
具体如下图所示,核心思想是在原始预训练模型增加一个旁路,做一个降维再升维的操作。训练的时候固定预训练模型的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与预训练语言模型的参数叠加。用随机高斯分布初始化 A,用0矩阵初始化B。这样能保证训练时,新增的旁路BA=0,从而对模型结果没有影响。在推理时,将左右两部分的结果加到一起,即h=Wx+BAx=(W+BA)x,所以,只要将训练完成的矩阵乘积BA跟原本的权重矩阵W加到一起作为新权重参数替换原始预训练语言模型的W即可,不会增加额外的计算资源。LoRA的最大优势是训练速度更快,使用的内存更少。
02
GPU服务器环境部署
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
然后一路next,没有报错的话就安装成功啦。为了后续查看显卡资源情况,最好还是再安装一个显卡监控工具,比如nvitop,用pip install nvitop即可,这里注意,由于不同服务器python版本有差异,最好安装anaconda部署自己的私有python空间,防止运行时报各种奇怪的错误,具体步骤如下:
1.安装anaconda 下载方式:wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh安装命令:sh Anaconda3-5.3.0-Linux-x86_64.sh 每个安装步骤都输入“yes”,最后conda init后完成安装,这样每次进入安装用户的session,都会直接进入自己的python环境。如果安装最后一步选择no,即不进行conda init,则后续可以通过source /home/jd_ad_sfxn/anaconda3/bin/activate来进入到私有的python环境。
2.安装setuptools 接下来需要安装打包和分发工具setuptools,下载地址:wget https://files.pythonhosted.org/packages/26/e5/9897eee1100b166a61f91b68528cb692e8887300d9cbdaa1a349f6304b79/setuptools-40.5.0.zip安装命令:unzip setuptools-40.5.0.zip cd setuptools-40.5.0/ python setup.py install
3.安装pip 下载地址:wget https://files.pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz安装命令:tar -xzf pip-18.1.tar.gz cd pip-18.1 python setup.py install
conda create -n alpaca python=3.9
conda activate alpaca
然后验证一下,如下图所示说明已经创建成功啦。
03 模型训练
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
本地会有文件夹alpaca-lora,然后cd alpaca-lora到文件夹内部执行。
pip install -r requirements.txt
如果安装过程执行完成,并没再有报错信息,并提示Successful compeleted,那么恭喜你啦,万里长征已经走完一半啦,你已经离成功很近了,再坚持一下下就很有可能成功啦:)。
好的,到现在为止,万里长征已经走完2/3了,别着急训练模型,现在验证一下GPU环境和CUDA版本信息,还记得之前安装的nvitop嘛,现在就用上了,在本地直接执行nvitop,就可以看到GPU环境和CUDA版本信息了,如下图:
在这里能够看到有几块显卡,驱动版本和CUDA版本等信息,当然最重要的还能看到GPU资源的实时使用情况。
怎么还没到模型训练呢,别着急呀,这就来啦。
先到根目录下然后执行训练模型命令:
如果是单个GPU,那么执行命令即可:
python finetune.py \
--base_model 'decapoda-research/llama-7b-hf' \
--data_path 'trans_chinese_alpaca_data.json' \
--output_dir './lora-alpaca-zh'
WORLD_SIZE=2 CUDA_VISIBLE_DEVICES=0,1 torchrun \
--nproc_per_node=2 \
--master_port=1234 \
finetune.py \
--base_model 'decapoda-research/llama-7b-hf' \
--data_path 'trans_chinese_alpaca_data.json' \
--output_dir './lora-alpaca-zh'
训练用的是2块GPU显卡,总共训练了1904分钟,也就是31.73个小时,模型就收敛了,模型训练是个漫长的过程,所以在训练的时候我们可以适当的放松一下,做点其他的事情:)。
04 模型推理
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目
python generate.py --base_model "decapoda-research/llama-7b-hf" \
--lora_weights './lora-alpaca-zh' \
--load_8bit
可以用浏览器访问一下看看,如果能看到页面,就说明服务已经启动成功啦。
在推理的时候也可以监控一下GPU的变化,可以看到GPU负载是比较高的,说明GPU在进行大量的计算来完成推理。
05 总结
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
1.效果问题:由于语料库不够丰富,所以目前用社区提供的语料库训练的效果并不是很好,对中文的理解力有限,如果想训练出能够执行特定领域的任务,则需要大量的语料支持,同时训练时间也会更长;
2. 推理时间问题:由于目前部署的GPU服务器有4块GPU,能够执行的有3块,基于3块GPU,在推理的时候还是比较吃力的,执行一次交互需要大概30s-1min,如果达到chatGPT那样实时返回,则需要大量的算力进行支持,可以反推,chatGPT后台肯定是有大集群算力支持的,所以如果想做成服务,成本投入是需要考量的一个问题;
3. 中文乱码问题:在input为中文的时候,有时候返回结果会乱码,怀疑跟切词有关,由于中文的编码问题,中文不像英文以空格区分,所以可能会有一定的乱码情况产生,调用open AI 的API也会有这种情况,后面看看社区是否有相应解决办法;
Serverless冷扩机器在压测中被击穿问题
技术漫话:图计算的那些事
求分享
求点赞
求在看