从0到1,无代码微调并部署本地大语言模型LLM
<h1 id="前言">前言</h1><p><strong>LLM模型微调</strong> 能让大模型掌握特定行业的深度知识,能够实现AI虚拟主播,AI医生,AI程序员,AI网络安全工程师等特定领域的延展。<mark>更重要的是,当有本地部署的硬件条件限制时,能够让微调后小的大语言模型等效百亿级的大语言模型</mark></p>
<p><strong>测试环境:windows11,RTX4070显卡</strong><br>
<strong>下面将手把手带你跑通无代码模型<mark>微调</mark>的全过程</strong></p>
<h1 id="环境安装">环境安装</h1>
<h3 id="必要的工具">必要的工具:</h3>
<ul>
<li>git: https://git-scm.cn/ (方便拉取资源)</li>
<li>python: https://www.python.org/ (微调和运行必要环境)</li>
</ul>
<h3 id="流程">流程:</h3>
<ol>
<li>创建文件夹,并拉取 llama-factory项目</li>
</ol>
<pre><code class="language-bash">mkdir D:/LLM-Tuning
cd D:/LLM-Tuning
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
</code></pre>
<ol start="2">
<li>安装LLaMA-Factory需要的环境</li>
</ol>
<pre><code class="language-bash">pip install -e "."
pip install modelscope
</code></pre>
<ol start="3">
<li>验证环境</li>
</ol>
<pre><code class="language-bash">python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
</code></pre>
<p>正常输出如下:</p>
<p><img alt="微调环境验证" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214150218960-673210761.png" class="lazyload"></p>
<blockquote>
<p>错误:正常来说安装完后验证环境会显示显卡型号,但是我在安装时,会出现报错,原因是它安装了错误的cuda版本,需要重新安装<code>torch</code><br>
解决方法如下:</p>
<pre><code>pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
</code></pre>
<p>如果其他版本请参考官网: https://pytorch.org/get-started/locally/</p>
</blockquote>
<h1 id="微调">微调</h1>
<p>这里用于演示,只对模型做一个自我认知的微调</p>
<h3 id="准备数据集">准备数据集</h3>
<p><strong>拉取数据集</strong></p>
<pre><code class="language-bash">git clone https://www.modelscope.cn/datasets/DanKe123abc/yuki_identity_sft.git
</code></pre>
<p><strong>修改数据集</strong><br>
下载完后,目录结构如下:</p>
<p><img alt="微调数据集1" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214152227376-1425485577.png" class="lazyload"></p>
<p>我们需要关注的是<code>yuki_identity_sft.jsonl</code>文件,用编辑器将下列文字全局替换:</p>
<pre><code>Yuki => 陈千语
DanKe => 管理员
</code></pre>
<p>效果图如下:</p>
<p><img alt="微调数据集替换" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214152346121-643203173.png" class="lazyload"></p>
<h3 id="准备本地模型">准备本地模型</h3>
<p>这里使用的是<code>qwen2.5_1.5B</code>用于演示<br>
<strong>下载模型</strong></p>
<pre><code class="language-python">from modelscope import snapshot_download
download_dir = "D:\\Models\\Qwen2.5-1.5B-Instruct"
model_dir = snapshot_download(
'qwen/Qwen2.5-1.5B-Instruct',
cache_dir=download_dir,
revision='master'
)
print(f"下载完成!模型路径为: {model_dir}")
</code></pre>
<h3 id="微调-1">微调</h3>
<p><strong>配置数据集信息</strong></p>
<p><img alt="配置文件" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214152426547-311579091.png" class="lazyload"></p>
<ol>
<li>打开<code>D:\LLM-Tuning\LLaMA-Factory\data</code>文件,将刚刚修改好的数据集<code>yuki_identity_sft.jsonl</code>文件拖入文件夹中</li>
<li>打开<code>dataset_info.json</code>文件,添加新配置:</li>
</ol>
<p><img alt="数据集配置" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214152449788-770799869.png" class="lazyload"></p>
<pre><code class="language-json">"MytestData": {
"file_name":"yuki_identity_sft.jsonl",
"columns": {
"messages": "conversations"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant"
},
"formatting": "sharegpt"
},
</code></pre>
<p><strong>打开LLamaFactory微调面板</strong></p>
<pre><code class="language-bash">python -m llamafactory.cli webui
</code></pre>
<p>设置参数如图,其他的默认就行:</p>
<p><img alt="微调参数设置" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214150416790-1261054114.png" class="lazyload"></p>
<p>设置完后直接点击开始,模型就开始训练了,训练完后会出现下面提示:</p>
<p><img alt="微调完成" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214153132772-1733729191.png" class="lazyload"></p>
<h1 id="验证模型">验证模型</h1>
<h3 id="加载训练完后的lora模型">加载训练完后的lora模型</h3>
<p><img alt="验证模型" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214153301432-196957093.png" class="lazyload"></p>
<h3 id="训练前后的大模型对比">训练前后的大模型对比</h3>
<p><strong>训练前</strong></p>
<p><img alt="微调前" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214153340072-1772816166.png" class="lazyload"></p>
<p><strong>训练后</strong></p>
<p><img alt="微调后" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214153412367-321181.png" class="lazyload"></p>
<p><mark><strong>观察图片可以发现,微调后qwen2.5认为自己是陈千语,自己由管理员开发的</strong></mark></p>
<h1 id="大模型部署">大模型部署</h1>
<p><mark><strong>下面不是新手向</strong></mark><br>
如果只是希望学习微调的在这里已经结束了,下面是本系列教程的后续,如何用<code>langchain</code>部署本地的LLM微调大语言模型</p>
<h3 id="环境配置">环境配置</h3>
<p>安装需要的环境</p>
<pre><code class="language-bash">pip install peft langchain langchain-huggingface
</code></pre>
<h3 id="下面是样例代码">下面是样例代码</h3>
<p>代码流程如下:<br>
<strong>加载基座模型->加载 LoRA 权重->正在合并权重->构建Langchain通道->调用模型</strong></p>
<pre><code class="language-python">import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
from peft import PeftModel
from langchain_huggingface import HuggingFacePipeline
from langchain_core.prompts import PromptTemplate
BASE_MODEL_PATH = r'D:\Models\Qwen2.5-1.5B-Instruct\qwen\Qwen2___5-1___5B-Instruct'
LORA_PATH = r'D:\D_MyProject\LLM-Tuning\LLaMA-Factory\saves\Qwen2.5-1.5B\lora\train_2026-02-13-23-16-50\checkpoint-260'
print("1. 正在加载基座模型...")
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_PATH, trust_remote_code=True)
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL_PATH,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
print("2. 正在加载 LoRA 权重 ...")
model = PeftModel.from_pretrained(base_model, LORA_PATH)
print("3. 正在合并权重 ...")
model = model.merge_and_unload()
print("4. 构建 LangChain 管道...")
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=200,
do_sample=True,
temperature=0.7,
repetition_penalty=1.1
)
llm = HuggingFacePipeline(pipeline=pipe)
print("\n=== 陈千语上线 ===\n")
respone = llm.invoke('你好,你是谁?')
print(f"{respone}")
</code></pre>
<h3 id="演示效果">演示效果</h3>
<p><img alt="langchain演示效果" loading="lazy" src="https://img2024.cnblogs.com/blog/2450496/202602/2450496-20260214153737723-860757899.png" class="lazyload"></p>
<p><mark><strong>至此,我们成功的实现了大模型LLM从微调到部署,把之前的langchain串起来...</strong></mark></p>
<p><mark><strong>如果❤喜欢❤本系列教程,就点个关注吧,后续不定期更新~</strong></mark></p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:ClownLMe,转载请注明原文链接:https://www.cnblogs.com/ClownLMe/p/19615980</p><br><br>
来源:https://www.cnblogs.com/ClownLMe/p/19615980
頁:
[1]