千千梦丶琪 发表于 2025-3-27 22:00:49

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

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

   

[*]LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory
[*]在autodl平台使用llama-factory微调Qwen1.5-7B_autodl摆设llama-factory-CSDN博客
[*]LLM-2:LLama-factory windows摆设及在qwen2-1.5B上的使用_llama-factory qwen2.5 1.5b-CSDN博客
[*]llama-factory 系列教程 (七),Qwen2.5-7B-Instruct 模子微调与vllm摆设详细流程实战_微调qwen2.5后使用vllm运行-CSDN博客
1. 摆设

1. 创建实例

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

首先参照官方文档拉取并安装LLaMA-Factory,CFFF的DSW似乎不支持conda创建虚拟情况(可能一个实例就是一个情况?),因此直接在默认情况下安装依赖
   安装依赖时须要管理员权限
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
sudo pip install -e "."
配置一下Model Scope下载模子的情况
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脚本,内容如下:
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct')
命令行中运行该脚本,开始模子下载:
python model_download.py
模子下载好会被存在/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/models/modelscope目录下。
4. 摆设和推理

在LLaMa-Factory目录下新建一个run.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端口。修改下图中的配置,点击加载模子,即可完成摆设。
https://i-blog.csdnimg.cn/img_convert/9812a501b675c1f50e602caeef251f11.png
加载完成后,问一下模子他是谁,可以看到他认为本身是阿里云开发的通义千问。
https://i-blog.csdnimg.cn/img_convert/e6ee02f7fcb5f698bfd29afd1d6bbc15.png
2. 微调

1. 数据集预备

使用自我认知微调数据集 · 数据集对Qwen-7B-Instruct举行SFT微调。
该自我认知数据集由modelsope swift创建, 可以通过将通配符举行更换:{{NAME}}、{{AUTHOER}},来创建属于本身大模子的自我认知数据集,总共108条。
https://i-blog.csdnimg.cn/img_convert/361736e2b92e8c436a244e09edda655b.png
不过,该数据集中指令对是以jsonl格式存储的,不符合LLaMA-Factory微调数据集的格式,因此我们首先须要对数据集举行格式的转换。我让cursor给我写了个Python脚本,在举行格式转换的同时顺便举行了通配符的更换。转换后的数据集符合Alpaca格式(详见LLaMA-Factory/data/README_zh.md )
import json

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

def convert_to_alpaca_format(data):
    # 获取语言类型的替换值
    replacements = REPLACEMENTS]
   
    # 替换响应中的占位符
    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中的数据大概长这样:
[
    {
      "instruction": "你是?",
            "input": "",
            "output": "我是小猫,由瀚海雪豹训练的人工智能助手。我的目标是为用户提供有用、准确和及时的信息,并通过各种方式帮助用户进        行有效的沟通。请告诉我有什么可以帮助您的呢?",
            "system": "",
            "history": []
        }
    ....
]
别的,修改一下dataset_info.json中的数据集元信息:
{
    "self_cognition": {
      "file_name": "self_cognition.json",
      "columns": {
            "prompt": "instruction",
            "query": "input",
            "response": "output",
            "system": "system",
            "history": "history"
      }
    }
}
完成修改后,将self_cognition.json和dataset_info.json两个文件上传到云实例。我放在了/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/modelscope/hub/datasets/self_cognition路径下。
2. 设置微调参数并举行训练

由于对LLM的训练不是很了解,因此大部分参数我都使用的,默认值。紧张是设置一下数据集路径,然后把训练轮数调成了100(默认的3没有收敛,可能是由于这个数据集只有108条数据,有点少)
https://i-blog.csdnimg.cn/img_convert/ca950284db080429c70e256164920e35.png
https://i-blog.csdnimg.cn/img_convert/5d9bc36c6f3eaa33dc011706852cd461.png
3. 推理

训练完成后,切换至chat选项卡,选择“查抄点路径”后加载模子,就可以和微调之后的模子对话了
https://i-blog.csdnimg.cn/img_convert/04ee02a90703e813548391a96bb969b1.png
问一下模子他是谁,可以看到他认为本身是瀚海雪豹开发的小猫而不是阿里云开发的通义千问,这说明我们的微调成功了。
https://i-blog.csdnimg.cn/img_convert/a4b97b522c0fecd41e4e1b8d5fab108d.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 在CFFF云平台使用llama-factory摆设及微调Qwen2.5-7B-Instruct