llama-factory SFT系列教程 (一),大模型 API 部署与使用

文章目录

    • 背景
    • 简介
      • 难点
    • 前置条件
    • 1. 大模型 api 部署
    • 下一步阅读

背景

本来今天没有计划学 llama-factory,逐步跟着github的文档走,发现这框架确实挺方便,逐渐掌握了一些。
最近想使用 SFT 微调大模型,llama-factory 是使用非常广泛的大模型微调框架;

简介

基于 llama_factory 微调 qwen/Qwen-7B,qwen/Qwen-7B-Chat
我使用的是 qwen/Qwen-7B,如果追求对话效果qwen/Qwen-7B-Chat的效果会好一点;

本系列的主要工作如下:

  1. 大模型 api 部署;直接部署开源大模型体验一下;
  2. 增加自定义数据集;为实现SFT准备数据;
  3. 大模型 lora 微调;
  4. 原始模型 + 微调后的lora插件,完成 api 部署;

使用 llama_factory 的 API 部署有 vllm加速推理;

难点

可能遇到的一些难点:
llama_factory 默认从 Huggingface下载模型,要改为从modelscope下载模型权重;

前置条件

llama_factory 装包

git clone https://github.com/hiyouga/LLaMA-Factory.git
# conda create -n llama_factory python=3.10
# conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]

If you have trouble with downloading models and datasets from Hugging Face, you can use ModelScope.

export USE_MODELSCOPE_HUB=1 # `set USE_MODELSCOPE_HUB=1` for Windows

1. 大模型 api 部署

虽然我执行了这条语句 export USE_MODELSCOPE_HUB=1 以为切换到 modelscope的下载源了;
但是 填写模型名称 --model_name_or_path qwen/Qwen-7B,还是会从 huggingface下载模型权重;于是我填写本地绝对路径的方式;

下载模型权重:

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B')
model_dir

输出模型的下载地址如下:

/mnt/workspace/.cache/modelscope/qwen/Qwen-7B

切换目录到刚才从github下载的 llama-factory 文件夹

cd LLaMA-Factory

执行 API 部署脚本,本文选择 api 而不是网页,因为API的用途更广,可供python程序调用,而网页只能与用户交互。

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api_demo.py \
--model_name_or_path /mnt/workspace/.cache/modelscope/qwen/Qwen-7B \
--template qwen 
--infer_backend vllm 
--vllm_enforce_eager

可以注意到 LLaMA-Factory 在模型推理时,使用了 vllm 加速;
不出意外的话,经过一段时间的模型权重加载,看到下述图片展示的状态时,那么 API 便部署成功了;
在这里插入图片描述

现在如何给 API 接口传参呢?是不是有点不知所措!
不用急,在图片的红框中,笔者已经给大家标出来了,http://localhost:8000/docs 便是API 的接口文档说明;

有同学会说:“我使用的云端服务器,而且还没有公网 ip,我该那怎么访问这个文档呢?”
笔者:直接点击便可访问,该文档做了内网穿透;

比如,我点击后,弹出了如下页面:https://dsw-gateway-cn-beijing.data.aliyun.com/dsw-70173/proxy/8000/docs

该 API 的文档页面如下图所示:
在这里插入图片描述

下述是官方给的请求体参数

{"model": "string","messages": [{"role": "user","content": "string","tool_calls": [{"id": "call_default","type": "function","function": {"name": "string","arguments": "string"}}]}],"tools": [{"type": "function","function": {"name": "string","description": "string","parameters": {}}}],"do_sample": true,"temperature": 0,"top_p": 0,"n": 1,"max_tokens": 0,"stream": false
}

笔者把下述的请求保存在1.sh文件中,因为下述请求体太长了,在sh文件中进行编辑方便一点;

curl -X 'POST' \'http://0.0.0.0:8000/v1/chat/completions' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"model": "string","messages": [{"role": "user","content": "你能帮我做一些什么事情?","tool_calls": [{"id": "call_default","type": "function","function": {"name": "string","arguments": "string"}}]}],"tools": [{"type": "function","function": {"name": "string","description": "string","parameters": {}}}],"do_sample": true,"temperature": 0,"top_p": 0,"n": 1,"max_tokens": 128,"stream": false
}'

执行bash 1.sh 便可获得大模型生成的回答了;
在这里插入图片描述
在 API 文档中,还有其他的接口,请读者自行探索。

下一步阅读

还有如下工作敬请期待:

  1. 增加自定义数据集;为实现SFT准备数据;
  2. 大模型 lora 微调;
  3. 原始模型 + 微调后的lora插件,完成 api 部署;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python之文件操作与管理

1、文件操作 通过open()操作,来创建文件对象,下面是open()函数语法如下: open(file,mode r,buffering -1 , encoding None ,errors None , newline None,closefd True,opener …

【综合分析类】校园霸凌

题目:近日,某地发生了一名初中生被3名初中生霸凌致S的事件,在社会上引起了广泛争议。有人呼吁,要完善未成年人保护法,进一步惩戒有关未成年的犯罪人员。对此你怎么看。 逐字稿:各位考官,考生思…

14. TypeScript类型保护(类型缩小、类型守卫)

类型保护是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。 类型守卫是返回布尔值的常规函数,接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。 TypeScript类型保护的方式 类型断言 类型断言是一种告诉编译器…

汇编基础-----常见命令基本使用

汇编基础-----常见命令基本使用 MOV:将数据从一个位置复制到另一个位置。 MOV destination, source例如: MOV RAX, RBX ; 将RBX寄存器中的值复制到RAX寄存器中ADD/SUB:将两个操作数相加或相减。 ADD destination, source SUB destinatio…

Python(3):条件语句+循环语句+逻辑运算符+符号优先级

文章目录 一、if语句1.if语句2.if 和 elif区别3.三元表达式 二、循环语句1.range函数和循环结束关键字2.while循环3.for循环 三、逻辑运算符1.and语句2.or语句3.not语句4.逻辑运算法的优先级 四、python运算符优先级和结合性一览表 一、if语句 1.if语句 1.if单分支语句 格式…

Python项目1 外星人入侵_外星人

在本章中,我们将在游戏《外星人入侵》中添加外星人。首先,我们在屏幕上边缘附近添加一个外星人,然后生成一群外星人。我们让这群外星人向两边和下面移 动,并删除被子弹击中的外星人。最后,我们将显示玩家拥有的飞船数量…

Python-configparser更新write保留注释

背景 python语言用来解析配置文件的模块是ConfigParser,python3中是configparser模块,在使用中经常用到write方法将配置项重新写入文件: config.ini文件: # 数据库配置 [database] # 主机 # IP host localhost # 端口 port 3…

从路由器syslog日志监控路由器流量

路由器是关键的网络基础设施组件,需要随时监控,定期监控路由器可以帮助管理员确保路由器通信正常。日常监控还可以清楚地显出通过网络的流量,通过分析路由器流量,安全管理员可及早识别可能发生的网络事件,从而避免停机…

关于STL容器线程安全性的问题

关于STL容器线程安全性的问题 STL容器(如vector)本身并不是线程安全的,因此在使用它们进行多线程编程时需要格外小心。即便写入操作(由生产者执行)是由单线程完成的,但在并发读取时,由于可能发…

程序员如何搞副业——中学生视角看职业拓展的深入探索

在数字化浪潮席卷全球的今天,程序员这一职业因其独特的魅力和广阔的发展前景而备受瞩目。作为一名中学生,虽然尚未步入职业领域,但提前了解程序员的副业之路,不仅可以帮助我们拓宽视野,还能为未来的职业规划提供有益的参考。 首先,个人项目开发是程序员搞副业的一个重要…

计算机中,逻辑端口

计算机中,端口是什么 在计算机领域中,端口(Port)是一个逻辑概念,用于标识计算机与外部设备或另一台计算机通信时的出入口。它是计算机与外部通信的途径,分为物理端口和逻辑端口两种。 物理端口:物理端口也被称为接口,是计算机主板上或其他设备上的硬件接口,如USB接口…

算法训练营第二十三天(二叉树完结)

算法训练营第二十三天(二叉树完结) 669. 修剪二叉搜索树 力扣题目链接(opens new window) 题目 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>L) 。你可能需要改…

SQLite数据库在Linux系统上的使用

SQLite是一个轻量级的数据库解决方案,它是一个嵌入式的数据库管理系统。SQLite的特点是无需独立的服务器进程,可以直接嵌入到使用它的应用程序中。由于其配置简单、支持跨平台、服务器零管理,以及不需要复杂的设置和操作,SQLite非…

【算法】排硬币 - 二分法/牛顿迭代

题目 假设有n枚硬币,要摆一个阶梯形,第一行1个,第二行2个,以此类推,看n枚硬币能摆多少行,返回行数。未摆满行的不算。 原理 二分法 先假设放 x 行需要 m 个硬币,用 m 与 n 对比,…

OpenGL着色器实现纹理合并显示

OpenGL着色器实现纹理合并显示 本文介绍了opengl下实现纹理的装载,同时借助顶点着色器和片源着色器实现两个不同外部纹理的合并显示。 目录 1 opengl下纹理的装载2 纹理合并效果显示3 完整的代码 1 opengl下纹理的装载 // 初始化GLFWif (!glfwInit()) {std::cerr …

从建表语句带你学习doris_数据类型

1、前言概述 1.1、doris建表模板 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [DATABASE.]table_name (column_definition1[,column_deinition2,......][,index_definition1,[,index_definition2,]] ) [ENGINE = [olap|mysql|broker|hive]] [key_desc] [COMMENT "table co…

共享低碳未来!科士达新一代工商业储能产品引爆ESIE 2024

4月11日,第十二届储能国际峰会暨展览会(ESIE 2024)在北京首钢会展中心盛大开幕,科士达以“数智光储,共享低碳未来”为主题,携多款工商业储能产品及解决方案惊艳亮相本次盛会。 展会首日,科士达展…

C/C++基础----运算符

算数运算符 运算符 描述 例子 两个数字相加 两个变量a b得到两个变量之和 - 两个数字相减 - * 两个数字相乘 - / 两个数字相除 - % 两个数字相除后取余数 8 % 3 2 -- 一个数字递减 变量a:a-- 、--a 一个数字递增 变量a: a 、 a 其中递…

VSCode中调试C++程序

目录 一、准备工作:安装插件 1、C/C插件 ​编辑 2、CMake插件 3、CMake tool插件 二、调试过程 1、debug 2、打断点 3、调C/C文件 每次重新调试的时候都忘了具体步骤,直接给自己写个备忘录好了。 一、准备工作:安装插件 1、C/C插件…

java二叉树前中后序遍历

代码随想录解题思路&#x1f192;力扣前序题目&#x1f192;力扣中序题目&#x1f192;力扣后序题目 递归遍历 // 前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();preorder(root…