赞
踩
地址:https://ollama.com/download
github地址: https://github.com/ollama/ollama
安装python3版本
https://www.python.org/downloads/
文档地址: https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
下载: https://developer.nvidia.com/cuda-downloads
选择示例: windows / x86_64 / 11 / exe(local) (实际按需选择)
官网 https://pytorch.org/
安装命令 (版本2.3.0 / 系统windows / 管理pip / 语言python / 平台CUDA 12.1
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
直接运行exe程序安装。安装完成后,可以在右下角看到ollama图标
环境变量控制:
OLLAMA_MODELS 配置模型下载部署的目录, 示例: D:\models
OLLAMA_HOST 服务地址端口, 示例: 0.0.0.0:11434
ollama运行命令见 ollama --help 查看帮助
ollama启动模型: ollama run llama3 (llama3 是线上模型名称)
地址: https://github.com/open-webui/open-webui
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
参数说明:
OLLAMA_BASE_URL: ollama 服务地址 -- 根据ollama 部署实际需要
name:docker 名称 -- 默认就好
open-webui: 静态文件地址 -- 不用改
github地址: https://github.com/hiyouga/LLaMA-Factory
启动步骤
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]
## windows 在训练中量化模型,需要安装 bitsandbytes windows版本 (不建议,量化由后续处理)
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl
启动
llamafactory-cli webui
帮助
llamafactory-cli help
数据集介绍:
https://github.com/hiyouga/LLaMA-Factory/blob/main/data/README.md
参数后续补充
最后预览命令,然后执行
生成的lora模型 < 500M
github地址: https://github.com/ggerganov/llama.cpp (属于ollama子目录关联项目,在llm/llama.cpp/)
命令行,在 ollama/llm/llama.cpp 源码的目录
执行:(地址按需调整)
python convert-hf-to-gguf.py D:\work\data\ollama\models\Llama3-8B-Chinese-Chat --outtype f16 --outfile D:\work\data\ollama\models\Llama3-8B-Chinese-Chat\converted.gguf
转换遇到 问题: BPE pre-tokenizer was not recognized - update get_vocab_base_pre()
convert-hf-to-gguf.py line 429: logger.debug 改 warning 并查看 输出的值
根据输出的 chkhsh 值修改 key。 返回是 "llama-bpe" 常量
量化工具包下载
地址: https://github.com/ggerganov/llama.cpp/releases/tag/b2932
文件名: llama-b1380-bin-win-avx2-x64.zip
下载后解压到 ollama 项目下 llm\llama.cpp\build\bin\Release 目录
执行: (地址按需调整)
build\bin\Release\quantize D:\work\data\ollama\models\Llama3-8B-Chinese-Chat\converted.gguf D:\work\data\ollama\models\Llama3-8B-Chinese-Chat\converted_quantized.gguf q4_0
这里使用q4_0 ,8G显存只能加载q4模型。 有更高显存,可以提高精度
命令行切换到 ollama 目录
创建 Modelfile 文件 内容如下 (模型地址按需调整)
# Modelfile generated by "ollama show" # To build a new Modelfile based on this one, replace the FROM line with: # FROM llama3:latest FROM D:\work\python\LLaMA-Factory\export\v2\converted_quantized.gguf TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|> {{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|> {{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|> {{ .Response }}<|eot_id|>""" PARAMETER temperature 0.6 PARAMETER top_p 0.9 PARAMETER stop "<|start_header_id|>" PARAMETER stop "<|end_header_id|>" PARAMETER stop "<|eot_id|>" PARAMETER stop "<|reserved_special_token"
指定模型名称或路径。
到时候根据自己项目部署修改这部分meta-llama/Llama-2-7b-hf
使用的数据集名称。(数据集就自己研究吧,如果不忙也会写先挖个坑)
根据自己需求修改这部分c4_demo的数据集名字
指定LoRA调整的目标层,这里是q_proj和v_proj。
在使用LoRA(Low-Rank Adaptation,低秩适应)技术进行模型微调时,我们通常会选择模型中的特定层(或部分)进行调整。这些层被称为“目标层”。
具体来说:
1.q_proj:通常指的是在自注意力机制中,用于生成查询(Query)向量的投影层。
2.v_proj:指的是在自注意力机制中,用于生成值(Value)向量的投影层。
自注意力机制是很多现代深度学习模型,特别是Transformer模型的核心组成部分。在这种机制中,输入数据会被转换成三种类型的向量:查询(Query)、键(Key)、值(Value)。这些转换通常通过线性投影实现,即通过乘以一个权重矩阵。
在使用LoRA进行微调时,我们不直接修改这些投影层的权重矩阵,而是在这些层插入低秩矩阵。通过优化这些低秩矩阵,我们可以在不显著改变原始模型结构的情况下,有效地调整模型的行为,使其更好地适应新的任务或数据。
这种方法的优点是,它可以在保持大部分预训练模型权重不变的情况下,通过调整相对较少的参数来实现快速有效的微调。这样不仅可以节省计算资源,还可以减少过拟合的风险,特别是在数据较少的情况下。
指定输出目录,训练完成后的模型和相关文件将保存在这里。
到时候根据需求修改这部分就可以 saves/LLaMA2-7B/lora/pretrain
如果设置参数为true,将覆盖加载数据时的缓存。
如果设置参数为true,将覆盖输出目录中已存在的文件。
指定处理数据时的截断长度。
指定预处理数据时使用的工作进程数量。
每个设备上的训练批次大小。
每个设备上的评估批次大小。
梯度累积步数,用于在更新模型前累积更多的梯度,有助于使用较小的批次大小训练大模型
梯度累积的工作原理:
在每个批次的前向和反向传播过程中,不是立即更新模型权重,而是将梯度累积多个批次。当累积到一定数量的步骤后,再统一更新模型权重。这样可以模拟更大批量大小的效果。
选择梯度累积步数:
选择多少步骤进行梯度累积取决于你的具体需求和硬件限制。一般来说,步数越多,模拟的批量大小就越大,但同时每次更新权重的间隔也更长,可能会影响训练速度和效率。
低资源环境:可以选择较高的累积步数,以减少硬件压力。
高资源环境:如果内存允许,可以减少累积步数,使训练更加频繁地更新,可能会加速收敛。
学习率调度器类型 其他学习率调度器类型: linear(线性): 描述:学习率从一个较高的初始值开始,然后随着时间线性地减少到一个较低的值。 使用场景:当你想要让模型在训练早期快速学习,然后逐渐减慢学习速度以稳定收敛时使用。 cosine(余弦): 描述:学习率按照余弦曲线的形状进行周期性调整,这种周期性的起伏有助于模型在不同的训练阶段探索参数空间。 使用场景:在需要模型在训练过程中不断找到新解的复杂任务中使用,比如大规模的图像或文本处理。 cosine_with_restarts(带重启的余弦): 描述:这是余弦调整的一种变体,每当学习率达到一个周期的最低点时,会突然重置到最高点,然后再次减少。 使用场景:适用于需要模型从局部最优解中跳出来,尝试寻找更好全局解的情况。 polynomial(多项式): 描述:学习率按照一个多项式函数减少,通常是一个幂次递减的形式。 使用场景:当你需要更精细控制学习率减少速度时使用,适用于任务比较复杂,需要精细调优的模型。 constant(常数): 描述:学习率保持不变。 使用场景:简单任务或者小数据集,模型容易训练到足够好的性能时使用。 constant_with_warmup(带预热的常数): 描述:开始时使用较低的学习率“预热”模型,然后切换到一个固定的较高学习率。 使用场景:在训练大型模型或复杂任务时,帮助模型稳定地开始学习,避免一开始就进行大的权重调整。 inverse_sqrt(逆平方根): 描述:学习率随训练步数的增加按逆平方根递减。 使用场景:常用于自然语言处理中,特别是在训练Transformer模型时,帮助模型在训练后期进行细微的调整。 reduce_lr_on_plateau(在平台期降低学习率): 描述:当模型的验证性能不再提升时,自动减少学习率。 使用场景:适用于几乎所有类型的任务,特别是当模型很难进一步提高性能时,可以帮助模型继续优化和提升。
每训练10步记录一次日志
每训练100步保存一次模型。
每训练100步进行一次评估。
评估策略,这里设置为按步骤评估。
训练结束时加载表现最好的模型。
设置学习率。
学习率是机器学习和深度学习中控制模型学习速度的一个参数。你可以把它想象成你调节自行车踏板力度的旋钮:旋钮转得越多,踏板动得越快,自行车就跑得越快;但如果转得太快,可能会导致自行车失控。同理,学习率太高,模型学习过快,可能会导致学习过程不稳定;学习率太低,模型学习缓慢,训练时间长,效率低。
常见的学习率参数包括但不限于:
1e-1(0.1):相对较大的学习率,用于初期快速探索。
1e-2(0.01):中等大小的学习率,常用于许多标准模型的初始学习率。
1e-3(0.001):较小的学习率,适用于接近优化目标时的细致调整。
1e-4(0.0001):更小的学习率,用于当模型接近收敛时的微调。
5e-5(0.00005):非常小的学习率,常见于预训练模型的微调阶段,例如在自然语言处理中微调BERT模型。
选择学习率的情况:
快速探索:在模型训练初期或者当你不确定最佳参数时,可以使用较大的学习率(例如0.1或0.01),快速找到一个合理的解。
细致调整:当你发现模型的性能开始稳定,但还需要进一步优化时,可以减小学习率(例如0.001或0.0001),帮助模型更精确地找到最优解。
微调预训练模型:当使用已经预训练好的模型(如在特定任务上微调BERT)时,通常使用非常小的学习率(例如5e-5或更小),这是因为预训练模型已经非常接近优化目标,我们只需要做一些轻微的调整。
训练的轮次
最大样本数。
验证集大小,这里设置为10%。
如果设置参数为true 将绘制损失图。
如果设置,将使用16位浮点数进行训练,可以减少内存使用并可能加速训练。
在深度学习中,我们可以选择不同的数值精度来进行模型的训练和计算。不同的精度会影响计算资源的使用、训练速度和模型的精确度。下面我用更通俗的语言解释一下这些术语:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。