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

在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创建虚拟环境(可能一个实例就是一个环境?),因此直接在默认环境下安装依赖

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

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

配置一下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端口。修改下图中的配置,点击加载模型,即可完成部署。

webui

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

image-20241216153917516

2. 微调

1. 数据集准备

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

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

image-20241216151808298

不过,该数据集中指令对是以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[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中的数据大概长这样:

[
    {
        "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.jsondataset_info.json两个文件上传到云实例。我放在了/cpfs01/projects-SSD/cfff-d4f7bbbfa159_SSD/zfy_20301030034/modelscope/hub/datasets/self_cognition路径下。

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

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

image-20241216153134999

train_loss

3. 推理

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

image-20241216153551256

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

image-20241216153705014

### 部署微调 Qwen2.5 模型教程 #### 安装依赖库 为了顺利进行模型的微调部署,首先需要安装 `llama-factory` 及其相关依赖项。这可以通过执行如下命令完成: ```bash pip install -r requirements.txt ``` 此操作会依据项目需求自动拉取并配置必要的软件包[^1]。 #### 下载预训练模型 对于 Qwen2.5-7B-Instruct 模型而言,在正式开始调整前应当先将其下载至本地环境中。利用 ModelScope 提供的功能可以轻松实现这一点: ```python from modelscope import snapshot_download model_dir = snapshot_download('Qwen/Qwen2.5-7B-Instruct') ``` 上述代码片段展示了如何通过指定仓库地址来获取目标模型,并保存在一个自动生成的目录内[^2]。 #### 设置工作区及启动 WebUI 当一切准备就绪之后,则需切换到 LLaMA-Factory 的根目录位置,并激活图形化界面以便更直观地管理后续任务: ```bash %cd LLaMA-Factory !llamafactory-cli webui ``` 此时应该能够在浏览器中访问由 CLI 工具开启的服务页面,从而进一步开展实验活动[^3]。 #### 编写 Python 脚本以优化存储策略 考虑到大型语言模型可能占用较多磁盘空间的情况,建议预先设定好缓存文件夹的位置,防止因系统默认路径而引发潜在风险。下面给出了一种方法用于控制模型的具体存放地点: ```python from modelscope import snapshot_download model_dir = snapshot_download( 'qwen/Qwen2-7B', cache_dir='/root/autodl-tmp', revision='master' ) ``` 这段程序不仅指定了下载链接还明确了期望放置资源的目标路径以及版本号信息[^4]。 #### 数据集处理 针对特定应用场景下的语料整理同样重要。通常情况下,开发者们会选择清理原始文本资料中的噪声成分,构建高质量的小样本集合作为输入源供给给待训练网络学习使用。具体做法可参照官方文档说明或社区贡献者分享的经验贴来进行[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值