在CFFF云平台使用llama-factory部署及微调Qwen2.5-7B-Instruct

文章目录

  • 在CFFF云平台使用llama-factory部署及微调Qwen2.5-7B-Instruct
    • [1. 部署](#1. 部署)
      • [1. 创建实例](#1. 创建实例)
      • [2. 安装环境](#2. 安装环境)
      • [3. 下载模型](#3. 下载模型)
      • [4. 部署和推理](#4. 部署和推理)
    • [2. 微调](#2. 微调)
      • [1. 数据集准备](#1. 数据集准备)
      • [2. 设置微调参数并进行训练](#2. 设置微调参数并进行训练)
      • [3. 推理](#3. 推理)

在CFFF云平台使用llama-factory部署及微调Qwen2.5-7B-Instruct

1. 部署

1. 创建实例

24GB的显存基本可以满足7B模型的部署和微调,不过由于CFFF平台都是A100显卡,因此选择一张GPU创建云服务器实例(AI4S_share_queue, A100 * 1, 80G)

2. 安装环境

首先参照官方文档拉取并安装LLaMA-Factory,CFFF的DSW似乎不支持conda创建虚拟环境(可能一个实例就是一个环境?),因此直接在默认环境下安装依赖

安装依赖时需要管理员权限

sh 复制代码
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
sudo pip install -e ".[torch,metrics]"

配置一下Model Scope下载模型的环境

sh 复制代码
export USE_MODELSCOPE_HUB=1
# 更改模型缓存地址
export MODELSCOPE_CACHE=/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/modelscope
pip install modelscope vllm
# 安装vllm时可能导致进程killed,需要降低内存安装
# pip install modelscope vllm --no-cache-dir

3. 下载模型

LLaMa-Factory目录下新建一个model_download.py脚本,内容如下:

python 复制代码
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct')

命令行中运行该脚本,开始模型下载:

sh 复制代码
python model_download.py

模型下载好会被存在/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/models/modelscope目录下。

4. 部署和推理

LLaMa-Factory目录下新建一个run.sh脚本,内容如下:

sh 复制代码
CUDA_VISIBLE_DEVICES=0 python src/webui.py \
    --model_name_or_path /cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/models/modelscope/hub/Qwen/Qwen2___5-7B-Instruct \
    --template qwen \
    --infer_backend vllm \
	--vllm_enforce_eager
# 默认端口为7860

即可启动webui界面。利用autodl提供的ssh隧道工具,即可在本地访问云服务器的7860端口。修改下图中的配置,点击加载模型,即可完成部署。

加载完成后,问一下模型他是谁,可以看到他认为自己是阿里云开发的通义千问。

2. 微调

1. 数据集准备

使用自我认知微调数据集 · 数据集对Qwen-7B-Instruct进行SFT微调。

该自我认知数据集由modelsope swift创建, 可以通过将通配符进行替换:{{NAME}}、{{AUTHOER}},来创建属于自己大模型的自我认知数据集,总共108条。

不过,该数据集中指令对是以jsonl格式存储的,不符合LLaMA-Factory微调数据集的格式,因此我们首先需要对数据集进行格式的转换。我让cursor给我写了个Python脚本,在进行格式转换的同时顺便进行了通配符的替换。转换后的数据集符合Alpaca格式(详见LLaMA-Factory/data/README_zh.md

python 复制代码
import json

# 定义替换值
REPLACEMENTS = {
    'zh': {
        '{{NAME}}': '小猫',
        '{{AUTHOR}}': '瀚海雪豹'
    },
    'en': {
        '{{NAME}}': 'cattt',
        '{{AUTHOR}}': 'PolarSnowLeopard'
    }
}

def convert_to_alpaca_format(data):
    # 获取语言类型的替换值
    replacements = REPLACEMENTS[data['tag']]
    
    # 替换响应中的占位符
    response = data['response']
    for placeholder, value in replacements.items():
        response = response.replace(placeholder, value)
    
    # 构建 Alpaca 格式的数据
    return {
        'instruction': data['query'],
        'input': '',  # 这个数据集没有额外的输入
        'output': response,
        'system': '',  # 这个数据集没有系统提示词
        'history': []  # 这个数据集没有对话历史
    }

def main():
    # 读取 JSONL 文件
    with open('self_cognition.jsonl', 'r', encoding='utf-8') as f:
        lines = f.readlines()
    
    # 转换每一行数据
    converted_data = []
    for line in lines:
        if line.strip():  # 跳过空行
            data = json.loads(line)
            converted_data.append(convert_to_alpaca_format(data))
    
    # 保存为 JSON 文件
    with open('self_cognition.json', 'w', encoding='utf-8') as f:
        json.dump(converted_data, f, ensure_ascii=False, indent=2)

if __name__ == '__main__':
    main()

完成转换后的self_cognition.json中的数据大概长这样:

json 复制代码
[
    {
        "instruction": "你是?",
    	"input": "",
    	"output": "我是小猫,由瀚海雪豹训练的人工智能助手。我的目标是为用户提供有用、准确和及时的信息,并通过各种方式帮助用户进	行有效的沟通。请告诉我有什么可以帮助您的呢?",
    	"system": "",
    	"history": []
  	}
    ....
]

此外,修改一下dataset_info.json中的数据集元信息:

json 复制代码
{
    "self_cognition": {
        "file_name": "self_cognition.json",
        "columns": {
            "prompt": "instruction",
            "query": "input",
            "response": "output",
            "system": "system",
            "history": "history"
        }
    }
}

完成修改后,将self_cognition.jsondataset_info.json两个文件上传到云实例。我放在了/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/modelscope/hub/datasets/self_cognition路径下。

2. 设置微调参数并进行训练

由于对LLM的训练不是很了解,因此大部分参数我都使用的,默认值。主要是设置一下数据集路径,然后把训练轮数调成了100(默认的3没有收敛,可能是因为这个数据集只有108条数据,有点少)

3. 推理

训练完成后,切换至chat选项卡,选择"检查点路径"后加载模型,就可以和微调之后的模型对话了

问一下模型他是谁,可以看到他认为自己是瀚海雪豹开发的小猫而不是阿里云开发的通义千问,这说明我们的微调成功了。

相关推荐
zaim17 小时前
计算机的错误计算(一百八十六)
人工智能·python·ai·大模型·llm·误差·decimal
带电的小王10 小时前
llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型
llm·llama.cpp·vlm·mobilevlm·图生文
CSBLOG1 天前
Day27 - 大模型微调,LLaMA搭建
人工智能·深度学习·llama
火山引擎边缘云1 天前
2024冬季FORCE大会,火山引擎边缘云全面展示边缘云 + AI 产品技术方案
llm·aigc·边缘计算
python_知世1 天前
基于LLaMA-Factory微调Llama3
人工智能·深度学习·程序人生·自然语言处理·大语言模型·llama·大模型微调
handsomelky1 天前
ollama本地部署大语言模型记录
人工智能·语言模型·自然语言处理·chatgpt·llama·ollama·gemma
Baihai IDP2 天前
机械鹦鹉与真正的智能:大语言模型推理能力的迷思
人工智能·ai·llm·genai·白海科技
知来者逆2 天前
基于大语言模型的多代理下一代制造系统能灵活动态管理制造资源的高效调度方法
人工智能·深度学习·自然语言处理·llm·大语言模型·制造
曦云沐2 天前
Llama3模型详解 - Meta最新开源大模型全面解析
开源·llama