当前位置: 首页 > news >正文

在Modelarts上微调量化Llama3,并用docker部署

本文概述

本文先使用llama-factory去微调llama3大模型,然后使用llama.cpp去量化模型并打包为docker部署到服务器上让qq机器人能够调用服务,实现qq群内问答。

效果展示

环境准备

本文使用华为云的Modelarts的notebook去进行的模型微调

ubuntu20.04,cuda:11.7,pytorch:2.0.0,gpu:v100 32G

一、配置自定义镜像

华为云默认的镜像非常垃圾,请自行前往AI Gallery里面获取自定义镜像

链接:AI Gallery_算法_开发者_华为云

推荐使用这个,然后点击进入详情页

复制与你modelarts相同区域的url

然后在modelarts控制台的镜像管理这里去点击注册镜像

粘贴刚才复制的url,然后把这两个类型都勾选上,自定义镜像就创建完成

二、创建notebook

按照上图去进行配置,注意的是我们要开启这个ssh远程开发,因为使用modelarts自带的非常难用。

然后进入notebook详情页,在地址哪里第一个框就是服务器的用户名,第二个框是主机地址

三、使用Xshell和Xftp连接服务器

将主机地址和端口号填好,然后点击确认

然后输入用户名

选择public,然后点击浏览并选择用户密钥

然后点击导入,导入你刚才在华为云哪里配置的密钥对文件(后缀为.pem)

然后选择用户密钥之后,点击确认

然后就连接成果了,Xtfp也是这样操作,具体就不演示了。

四、安装llama-factory

执行下面指令,即可完成安装

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

五、下载llama3-8b-chinese-chat

因为llama3-8b基本上是没有任何中文能力的,所以我们需要在别人训练好的中文模型的基础上进行微调,如果你的任务是英文的那么直接下载原版的就好了。

因为hugging face上下载速度堪忧,我这里直接上传到百度网盘上供大家下载。

链接:https://pan.baidu.com/s/1ETy7Q90IPdJbVLOXjVFGeA?pwd=6rw7 
提取码:6rw7 
--来自百度网盘超级会员V5的分享

六、准备好微调数据集

这个数据集是我自己采集数据构建的特定任务数据集,大概有1200多组数据,共80多W字。

七、修改dataset_info.json

然后按照这个结构去增加你新添加的数据集信息

八、使用factory webui界面去可视化微调llama3

先将之前下载的中文模型通过xftp上传到服务器,将修改后的datasets_info.json覆盖原来服务器上的

然后执行下面这行代码

CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

然后点击属性

点击添加按钮

将目标端口改为factory web服务的端口,然后点击确定。

然后在浏览器上输入127.0.0.1:7777就可以打开factory webui页面

然后调整参数进行训练即可,具体调参和训练过程这里就不演示了

九、合并lora模型

在LLaMA-Factory的examples/merge_lora文件夹下,编辑llama3_lora_sft.yaml文件

其中model_name_or_path是预训练大模型的路径,adapter_name_or_path是我们微调好的lora的路径。export_device默认为cpu,如果你需要使用gpu去进行推理的话就改为gpu

保存之后我们执行下面这行命令,完成lora和预训练模型的合并

CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

十、安装llama.cpp

$ git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

注意,编译的话有两种

第一种是使用cpu去推理

make

第二种是使用gpu去推理

make LLAMA_CUDA=1

根据你的需求去选择编译类型,然后等待编译完成,便完成了llama.cpp的安装

十一、将hugging face格式的模型转换为gguf格式的模型

在llama.cpp根目录下执行下面这个命令,后面的路径是要转化格式的模型路径

python convert-hf-to-gguf.py /home/ma-user/llama3/LLaMA-Factory/models/llama3_lora_sft

转换好的后得到一个gguf格式的模型权重文件

十二、将模型量化为4bit,加快推理速度

./quantize /home/ma-user/llama3/LLaMA-Factory/models/llama3_lora_sft/ggml-model-f16.gguf /home/ma-user/llama3/LLaMA-Factory/models/llama3_lora_sft/ggml-model-q4.0.gguf q4_0

第一个路径是原来精度的gguf模型路径,第二个路径是量化后模型的保存路径,q4_0这个参数的意思是将模型量化为4bit

至此就完成了模型的量化

十三、测试模型

./server -m /home/ma-user/llama3/LLaMA-Factory/models/llama3_lora_sft/ggml-model-q4.0.gguf -c 4096 -b 64 -n 1024 -t 9999 --repeat_penalty 1.2 --top_k 20 --top_p 0.5 --color -i  --main-gpu 0 --n_gpu_layers 33 --port 60006 -ngl 41

使用这行命令启动llama.cpp的可视化界面

端口这样设置

然后我们在浏览器上输入127.0.0.1:7778打开可视化界面

十四、使用docker部署模型

ps:modelarts里面没有docker,并且也不能安装docker,所以下面这几步我在本地主机上演示,你们也可以在有GPU的服务器上进行(我A100云服务器过期了什么人间疾苦)

执行下面这条命令

docker run -d -p 8080:8080 -v D:/llama3/models:/models --name llama3 --gpus all ghcr.io/ggerganov/llama.cpp:server-cuda -m models/ggml-model-q4.0.gguf -c 4096 -b 64 -n 1024 -t 9999 --repeat_penalty 1.2 --top_k 20 --top_p 0.5 --n_gpu_layers 33 --host 0.0.0.0 --port 8080

然后执行

docker ps

出现这个就是运行成功了

import requestsdef send_request(prompt):url = "http://localhost:8080/completion"  # 假设服务端点为/completion,根据实际情况调整headers = {"Content-Type": "application/json",}data = {"prompt": prompt,"n_predict": 1024}try:response = requests.post(url, headers=headers, json=data)response.raise_for_status()  # 如果响应状态码不是200,将抛出异常response_data = response.json()print("Response:", response_data)except requests.exceptions.RequestException as e:print(f"Error occurred: {e}")if __name__ == "__main__":prompt = '{"prompt":"给出一个游戏设计创意"}'send_request(prompt)

然后我们用python去写个请求去测试一下我们的api服务是否正常

最后也是能够正常的调用我们的llama3去生成这个回答。

十五、部署到QQ机器人上

这部分过于繁杂,而且难度不大,暂时省略。

(完结撒花了~,这篇文章是偏向应用的,后续会更新更多涉及原理的文章)

作者介绍

作者本人是一名人工智能炼丹师,目前在实验室主要研究的方向为生成式模型,对其它方向也略有了解,希望能够在CSDN这个平台上与同样爱好人工智能的小伙伴交流分享,一起进步。谢谢大家鸭~~~

 如果你觉得这篇文章对您有帮助,麻烦点赞、收藏或者评论一下,这是对作者工作的肯定和鼓励。  

尾言

 如果您觉得这篇文章对您有帮忙,请点赞、收藏。您的点赞是对作者工作的肯定和鼓励,这对作者来说真的非常重要。如果您对文章内容有任何疑惑和建议,欢迎在评论区里面进行评论,我将第一时间进行回复。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络网络层之(6)ICMPv6协议
  • DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)
  • C++——辗转相处法
  • 「前端+鸿蒙」鸿蒙应用开发-TS函数
  • 【C++关键字】指针空值nullptr(C++11)
  • python使用gdb进行堆栈查看与调试
  • 【数据挖掘】学习笔记
  • .Net实现SCrypt Hash加密
  • Kafka面试题及答案
  • 【MySQL数据库】:MySQL索引特性
  • 纯理论容器实现的原理
  • 天才程序员周弈帆 | Stable Diffusion 解读(二):论文精读
  • React Hooks 封装可粘贴图片的输入框组件(wangeditor)
  • MPC+WBC多任务优先级控制例子
  • Ubuntu 22.04安装cuda及Pytorch教程
  • 分享的文章《人生如棋》
  • 230. Kth Smallest Element in a BST
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • EOS是什么
  • flask接收请求并推入栈
  • laravel5.5 视图共享数据
  • Median of Two Sorted Arrays
  • nodejs调试方法
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 关于extract.autodesk.io的一些说明
  • 聊聊flink的BlobWriter
  • 前端自动化解决方案
  • 如何优雅地使用 Sublime Text
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用Swoole加速Laravel(正式环境中)
  • HanLP分词命名实体提取详解
  • 带你开发类似Pokemon Go的AR游戏
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​如何使用QGIS制作三维建筑
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 计算机视觉入门
  • ######## golang各章节终篇索引 ########
  • #WEB前端(HTML属性)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (三)elasticsearch 源码之启动流程分析
  • (一)Java算法:二分查找
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • **CI中自动类加载的用法总结
  • **PHP二维数组遍历时同时赋值
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径