ollama下通过LLaMa-Factory微调qwen2.5:0.5b

因为没有GPU,所以这里选择qwen2.5:0.5b来学习微调。

首先介绍下什么是LLaMa-Factory:

LLaMa-Factory是一个能够简化微调过程的一个工具,就是他有一个UI界面,通过在界面上配置设置参数值就可以看到不同的效果,从而不用去写python指令去微调。

如果你会python也喜欢通过命令代码区微调,你就可以使用Hugging Face Transiformers框架去微调。

然后通过微调后,再讲微调后的模型放到ollama中,就可以直接通过ollama来对话,使用微调后的模型进行对话了。

下面开始具体的大家过程,ollama和qwen2.5的大家前面讲了,这里就不在讲了。直接进入正题,如何安装和进行微调

第一步:先在原始模型qwen2.5:0.5b中输入信息(我今天心情不好,怎么办),会看到模型显示很官方的语言,比如看心理医生,记住原始回答,然后微调后进行对比。

第二步:安装LLaMa-Factory

bash 复制代码
cd ~
mkdir LLaMA-Factory
cd ~/LLaMA-Factory
apt install python3.12-venv #安装虚拟环境,ubuntu安全因素要求必须使用虚拟环境

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 确认虚拟环境已激活(命令行前面应该出现 (venv))
which python

# 安装依赖
pip install -e ".[torch,metrics]"
pip install -r requirements.txt

# 卸载GPU版PyTorch,安装CPU版
pip uninstall -y torch torchvision torchaudio
pip install torch==2.2.2+cpu torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cpu
或者通过国内安装PyTorch如下,2选一即可,上面指定版本,,下面这个没有指定版本
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安装 PyTorch(根据你的 CUDA 版本选择)
# 如果有 NVIDIA GPU,安装 CUDA 版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安装modelscope用于下载模型
pip install modelscope

cd ~/LLaMA-Factory

# 设置环境变量,指定使用国内镜像
export MODELSCOPE_ENDPOINT='https://mirrors.aliyun.com/modelscope/'
# 指定模型缓存目录(避免权限问题)
export MODELSCOPE_CACHE='./models'

# 下载模型到本地
python -c "
from modelscope import snapshot_download
snapshot_download('Qwen/Qwen2.5-0.5B-Instruct', cache_dir='./models')
"

# 验证模型已下载
ls -la ./models/Qwen/

# 确保在虚拟环境中(你已经有了 (venv) 前缀)
# 设置使用本地模型(从 ModelScope 下载的)
export USE_MODELSCOPE_HUB=1
export MODELSCOPE_CACHE=./models

# 启动 Web UI
llamafactory-cli webui

# 如果上面的命令不行,用这个
python -m llamafactory.cli webui

也可以使用下面方式从国内镜像下载

bash 复制代码
# 从 GitCode 镜像克隆
git clone https://gitcode.com/wengxiezhen2671/LLaMA-Factory.git
cd LLaMA-Factory

# 使用清华源安装依赖
pip install -e ".[torch,metrics]" -i https://pypi.tuna.tsinghua.edu.cn/simple

# 验证安装
llamafactory-cli version

# 启动 Web UI
llamafactory-cli webui

第三步:在自己安装LLaMA-Factory/data/下创建json文件,里面是要微调的数据集,,里面有很多例子自己可以看一下

这里假如我们创建的是一个名为solar_dataset.json的文件

第四步:注册数据集

bash 复制代码
cd ~/LLaMA-Factory
vim ./data/dataset_info.json

然后再打开的文件末尾添加如下内容,将第三步创建的数据集注册进去

bash 复制代码
"solar_power": {
    "file_name": "solar_dataset.json",
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output"
    }
  }

第四步:通过yml进行配置

因为我这里尝试的是通过交互方式来训练,没使用ui方式,所以我需要配置训练的参数,用yaml来配置,参数如如下:

bash 复制代码
cat > solar_train_optimized.yaml << 'EOF'
### 模型配置
model_name_or_path: ./models/Qwen/Qwen2.5-0.5B-Instruct ###这个名字一定要跟你通过modelscope下载下来的模型名字一样,去这个路径下确认是否一样
template: qwen
finetuning_type: lora

### 数据集配置
dataset: solar_power
cutoff_len: 512
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 1

### 输出配置
output_dir: ./output/solar-lora
logging_steps: 5
save_steps: 50
plot_loss: true
overwrite_output_dir: true

### 训练参数
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 5.0e-5
num_train_epochs: 20.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
fp16: false
bf16: false

### LoRA 参数
lora_rank: 8
lora_alpha: 16
lora_dropout: 0.1
lora_target: q_proj,v_proj

### 优化器
optim: adamw_torch
weight_decay: 0.01

### 其他
do_train: true
report_to: none
EOF

第五步:开始训练

bash 复制代码
# 设置 CPU 环境
export CUDA_VISIBLE_DEVICES=""
export PYTORCH_ENABLE_MPS_FALLBACK=1

# 开始训练

llamafactory-cli train solar_train_optimized.yaml 2>&1 | tee training_v2.log

第六步:导出微调训练后的模型

bash 复制代码
cd ~/LLaMA-Factory

# 合并模型
llamafactory-cli export \
    --model_name_or_path ./models/Qwen/Qwen2___5-0___5B-Instruct \
    --adapter_name_or_path ./output/solar-lora-v2 \
    --template qwen \
    --finetuning_type lora \
    --export_dir ./output/solar-merged-v2

echo "✓ 模型合并完成"

第七步:测试微调效果(直接测试)

bash 复制代码
cd ~/LLaMA-Factory

# 创建测试脚本
cat > test_solar_model.py << 'EOF'
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

print("正在加载微调后的模型...")
model = AutoModelForCausalLM.from_pretrained('./output/solar-merged-v2')
tokenizer = AutoTokenizer.from_pretrained('./output/solar-merged-v2')

# 测试用例1:训练过的数据
test1 = "根据以下天气条:天气晴朗,温度28°C,风速3m/s。"

# 测试用例2:新数据(模型没见过的组合)
test2 = "根据以下天气:天气晴转多云,温度24°C,风速4m/s。"

# 测试用例3:极端情况
test3 = "根据以下天气条件:天气晴朗,温度35°C,风速1m/s。"

print("\n" + "="*60)
print("测试1:训练过的数据")
print("="*60)
inputs = tokenizer(test1, return_tensors="pt")
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

print("\n" + "="*60)
print("测试2:新数据(模型没见过的组合)")
print("="*60)
inputs = tokenizer(test2, return_tensors="pt")
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

print("\n" + "="*60)
print("测试3:极端情况")
print("="*60)
inputs = tokenizer(test3, return_tensors="pt")
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.7)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
EOF

python test_solar_model.py

第八步:将未调好的模型直接导入到ollama中使用

Ollama 0.1.7+ 版本支持直接导入 HuggingFace 格式的模型,不需要转换 GGUF!

bash 复制代码
cd ~/LLaMA-Factory

# 直接创建 Modelfile,指向合并后的模型
cat > Modelfile << 'EOF'
FROM ./output/solar-merged-50 ## 微调后生成的模型
PARAMETER temperature 0.6
PARAMETER top_p 0.85
SYSTEM "你是一个光伏发电预测专家,可以根据天气条件准确预测光伏电站的日发电量。"
EOF

# 导入 Ollama
ollama create solar-predictor -f Modelfile

# 验证
ollama list | grep solar-predictor

# 测试
ollama run solar-predictor "根据以下天气条件预测光伏日发电量:天气晴朗,温度30°C,光照强度1000W/m²,风速3m/s。"

如果需要使用GGUF,那么另外通过安装并运行 llama.cpp 转换,自行百度和deepseek即可。

到此就可以通过ollama微调后的qwen2.5本地模型进行提问了。

相关推荐
摸鱼仙人~1 天前
拆解 Llama 3.1 8B:从模型结构看懂大语言模型的核心设计
人工智能·语言模型·llama
python百炼成钢1 天前
16_RK3588 Llama-3-8B模型部署
linux·服务器·人工智能·llama
code_pgf1 天前
Jetson Orin NX 16G设备上配置AI服务自动启动的方案,包括Ollama、llama-server和OpenClaw Gateway三个组件
数据库·人工智能·安全·gateway·边缘计算·llama
serve the people1 天前
LLaMA-Factory微调数据的清洗与指令构造方法
java·服务器·llama
code_pgf1 天前
Jetson 上 OpenClaw + Ollama + llama.cpp 的联动配置模板部署大模型
服务器·数据库·人工智能·llama
code_pgf2 天前
Jetson Orin NX 16G部署llama.cpp框架(5090微调模型)
边缘计算·llama
Reisentyan2 天前
本地部署大模型过程中遇到的问题与处理过程
llama
忧郁的橙子.4 天前
07-大模型微调-LLama Factor微调Qwen -- 局部微调/训练医疗问答模型
llama·llama factor·微调qwen
南宫乘风5 天前
LLaMA-Factory 给 Qwen1.5 做 LoRA 微调 实战
人工智能·深度学习·llama