小白闯AI:Llama模型Lora中文微调实战

news2025/4/23 17:29:13

文章目录

  • 0、缘起
  • 一、如何对大模型进行微调
  • 二、模型微调实战
    • 0、准备环境
    • 1、准备数据
    • 2、模型微调
      • 第一步、获取基础的预训练模型
      • 第二步:预处理数据集
      • 第三步:进行模型微调
      • 第四步:将微调后的模型保存到本地
    • 4、模型验证
    • 5、Ollama集成部署
    • 6、结果测试
  • 三、使用总结

AI是什么?他应该是个工具,是一个让你更敢于去闯的工具,而不应该是让人偷懒的工具。

0、缘起

​ 一次偶然的机会,想要试试火爆的Ollama,在本地搭个AI大模型玩玩。于是,随意跑了一下大名鼎鼎的Llama3.2模型。当然,跑的是1b参数的小版本。结果,执行的效果是这样的。

在这里插入图片描述

在这里插入图片描述

​ 为什么会这样?到介绍页上看了看。原来llama模型确实没有用中文训练。
在这里插入图片描述
连泰语都能支持,中文却没有支持。这能忍?不行。我受不了。说什么也要让Llama见识见识中文。于是,决定要微调一个懂中文的Llama出来。但是,没有机器,不懂Python,更不懂什么调优框架。这事能不能成?
没事,有AI。一点点问AI,一点点调代码,于是有了这一次尝试。

一、如何对大模型进行微调

​ AI大模型的能力来自于他所学习过的数据,市面上的这些AI大模型产品也不例外。因此,在一些特定的业务场景,市面上这些AI大模型产品并没有学习过相关的业务知识,因此也就无法提供高质量的答案。比如Llama,并没有针对中文进行微调,因此,他虽然也能用中文进行问答,但是答复中总是带上一些鸟语。

​ 提升AI大模型特定领域内的理解能力的方法有两种。一种是RAG。在跟大模型交互时给他提供更多的相关数据。但这种方式就相当于是要让AI大模型回答问题的时候临时抱佛脚,大部分场景下效果也可以,但是终究治标不治本。另一种直击本质的方法就是微调。一些大型企业,使用海量数据,投入巨大资源,从头开始训练出一些基础模型,成为预训练模型,Pre-Training。而微调就是在这些预训练模型的基础上,再投入少量资源,喂养额外的数据,从而训练出更专业的私有大模型。
说人话,一老外要到长沙来玩,要找个翻译。从Englinsh翻译成中文的专业翻译好找,各种专业院校量大管饱,但是从English翻译成长沙话的个性翻译就没那么好找了。解决方案有两种,一种是就找个专业翻译。每次问他问题时,再给他配个小字典《长沙人的自我修养》,查查普通话怎么翻译成中文。这就是RAG。另一种就是考察一批专业翻译,在这些专业翻译中间挑一个懂长沙话的个性化翻译出来。这就是微调。
微调的方式有很多种。一种是让一个专业的大学生从头开始学习一遍长沙话。这就相当于全参微调。调整大模型的所有参数。代价自然是很大的。另一种就是找一个专业翻译,让他学学长沙话怎么讲。这样对专业翻译的英语能力不会有多大影响,只是给他叠加了一种新的方言。这样的话,学习的代价就没有那么大。而这就是Lora微调的思路。
Lora全称是Low-Rank Adaptation,低秩适配。他的核心思想是不调整原有大模型,只是通过叠加较小的低秩矩阵来对大模型进行微调。
在这里插入图片描述
这个过程可以大致的理解为: 对一个m*n(m和n都很大)的原始大模型参数矩阵,叠加一个 m*k的矩阵A和k*n的矩阵B(k可以比较小)。这样矩阵A和矩阵B相乘就可以保持和原有矩阵相同的计算结果。然后大模型在计算时,只需要在原有大模型参数矩阵的基础上,叠加 矩阵A*矩阵B的结果,就可以产生出一个新的大模型参数矩阵的结果。而矩阵A和矩阵B因为k(也就是秩)比较小,所以要调整的参数也就小很多。
这个过程听起来很复杂,不过其实落地到实践层面,已经有很多现成的实现工具了。而且,就算工具不会,只要清楚是在干什么事情,代码让AI来写,也没什么问题。接下来我们就需要使用Lora算法,给之间使用过的Llama3.2:1b大模型喂养一些中文数据,从而让他能够更好的理解中文。

二、模型微调实战

0、准备环境

要进行微调,首先需要评估手边的资源够不够。通常,一个简单的经验是使用Lora微调需要大概准备模型大小三倍的显存,这样就可以开始微调了。Llama3.2:1b模型的大小是1.3GB,所以,通常有个4G左右的显存就可以进行微调了。所以这个实验,当然你也可以动手玩玩。

这是最小资源,训练时,当然资源是越多越好。如果模型比较大,本地资源不够,那也可以租借一些公用的计算力平台,例如autodl.网址 https://www.autodl.com/home 。 这是目前比较便宜的一个平台。

然后,需要搭建微调的开发环境。目前微调的框架都还是基于Pytorch这些Python框架,所以,需要搭建Python开发环境。
Python环境搭建建议使用Anaconda工具直接搭建,比较方便。接下来创建Python环境。

# 创建Python运行环境
conda create -n llama3_lora python=3.10
conda activate llama3_lora
# 使用conda-forge通道 一个社区运营的Conda频道,下载比较快
conda config --add channels conda-forge
conda config --set channel_priority strict

# 如果之前安装过这个环境,可以删除重建  
conda deactivate  
conda env remove -n llama3_lora  
conda create -n llama3_lora python=3.10 -y  
conda activate llama3_lora  

# 安装pytorch  
conda install -c conda-forge pytorch torchvision torchaudio -y  

# 安装其他依赖  
pip install transformers datasets peft accelerate  
pip install bitsandbytes modelscope  

# 确保使用MPS后端  
pip install --upgrade --force-reinstall \
    torch \
    torchvision \
    torchaudio  

安装完成后,可以先执行一个简单的python代码检测一下环境

import sys
import torch

# 打印详细的系统和torch信息
print("Python 版本:", sys.version)
print("Torch 版本:", torch.__version__)
print("CUDA 是否可用:", torch.cuda.is_available())
print("MPS 是否可用:", torch.backends.mps.is_available())

这里主要是检查显卡是否支持CUDA。理论上主流的N卡都支持CUDA,这就可以开始训练了。Mac的M系列芯片将内存和显存整合到了一起,需要使用MPS设备进行计算。

1、准备数据

这次微调的数据就采用Huggingface上“臭名昭著”的ruozhiba数据。看看大名鼎鼎的Llama能不能经得起弱智吧的摧残。
在这里插入图片描述
这次采用的是一个包含1.5K记录的小样本。直接下载到本地即可。

2、模型微调

接下来的微调过程,都是在我手边一台Mac电脑上完成的,所有代码也全是AI写出来的,所以,只负责解读思路,不保证代码质量。其实所有的模型微调思路都差不多

第一步、获取基础的预训练模型

​ 这里采用国内的ModelScope社区提供的 LLM-Research/Llama-3.2-1B 模型。

1、对于大模型,通常可以认为参数越大,能力就越强。通常,简单关注一下各个大模型的benchmark基准测试后,就可以根据你手头的资源,选择适合的参数量版本就可以了。

2、ModelScope是一个大模型的大超市,即提供了开源的大模型以及高质量数据集,同时也提供了大模型测试、微调的一系列工具。如果需要更大规模的模型,可以选择Huggingface。不过毕竟是国外的平台,对国内不太友好。

​ 使用ModelScope社区的模型可以通过他提供的工具引入。

pip install modelscope

​ 然后,就可以将模型下载到本地。

from modelscope import snapshot_download

# 从ModelScope下载模型--第一次比较耗时
model_path = snapshot_download(
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同旺科技USB to SPI 适配器 ---- 指令之间延时功能

所需设备: 内附链接 1、同旺科技USB to SPI 适配器 1、指令之间需要延时发送怎么办?循环过程需要延时怎么办?如何定时发送?现在这些都可以轻松解决; 2、只要在 “发送数据” 栏的Delay单元格里面输入相应的延迟时间就…

2024年MathorCup数学建模D题量子计算在矿山设备配置及运营中的建模应用解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 D题 量子计算在矿山设备配置及运营中的建模应用 原题再现: 随着智能技术的发展,智慧矿山的概念越来越受到重视。越来越多的设备供应商正在向智慧矿山整体解决方案供应商转型,是否具备提供整体解…

回归——数学公式推导全过程

文章目录 一、案例引入 二、如何求出正确参数 1. 最速下降法 1)多项式回归 2)多重回归 2. 随机梯度下降法 一、案例引入 以Web广告和点击量的关系为例来学习回归,假设投入的广告费和点击量呈现下图对应关系。 思考:如果花了…

Redisson分布式锁(超时释放及锁续期)

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

音视频学习(三十):fmp4

FMP4(Fragmented MP4)是 MP4(MPEG-4 Part 14)的扩展版本,它支持流式传输,并被广泛应用于DASH(Dynamic Adaptive Streaming over HTTP)和HLS(HTTP Live Streaming&#xf…

Java安全-类的动态加载

类的加载过程 先在方法区找class信息,有的话直接调用,没有的话则使用类加载器加载到方法区(静态成员放在静态区,非静态成功放在非静态区),静态代码块在类加载时自动执行代码,非静态的不执行;先父类后子类,…

内存取证之windows-Volatility 3

一,Volatility 3下载 1.安装Volatility 3。 要求:python3.7以上的版本,我的是3,11,这里不说python的安装方法 使用 pip 安装 Volatility 3: pip install volatility3 安装完成后,验证安装: v…

fastapi+playwright爬取google搜索1-3页的关键词返回json

1,playwright无头 2,代理池随机获取代理ip 3,随机浏览行为,随机页面滚动 4,启用stealth模式 5,随机延时搜索 from fastapi import FastAPI, HTTPException from fastapi.responses import JSONResponse import asyncio from concurrent.futures import ThreadPool…

阿里云对象存储教程

搜“对象存储->免费试用” 选择你的心仪产品,我使用的是第一个 创建后获得三个实例: 点击右上角自己的账号可以进入到AccessKey管理界面 回到对象存储控制台创建Bucket实例 在以下文件中替换自己Bucket的信息即可美美使用~ package com.kitty.blog…

【Node.js入门笔记10---http 模块】

Node.js入门笔记10 Node.js---http 模块一、核心功能0.学习http的前提1. 创建 HTTP 服务器2. 处理请求和响应 二、进阶用法1. 路由管理2. 处理 POST 请求3. 中间件模式 三、常见场景四、错误处理与安全五、对比 http 与 Express六、工具库推荐: Node.js—http 模块 …

实验11 机器学习-贝叶斯分类器

实验11 机器学习-贝叶斯分类器 一、实验目的 (1)理解并熟悉贝叶斯分类器的思想和原理; (2)熟悉贝叶斯分类器的数学推导过程; (3)能运用贝叶斯分类器解决实际问题并体会算法的效果&a…

OpenHarmony子系统开发 - 电池管理(二)

OpenHarmony子系统开发 - 电池管理(二) 五、充电限流限压定制开发指导 概述 简介 OpenHarmony默认提供了充电限流限压的特性。在对终端设备进行充电时,由于环境影响,可能会导致电池温度过高,因此需要对充电电流或电…

hive 数据简介

Hive介绍 1)Hive简介 Hive是基于Hadoop的一个数据仓库工具,用于结构化数据的查询、分析和汇总。Hive提供类SQL查询功能,它将SQL转换为MapReduce程序。 Hive不支持OLTP,Hive无法提供实时查询。 2)Hive在大数据生态环境…

Win32桌面编程:ACLUI.DLL,EditSecurity(IntPtr hwndOwner, ISecurityInformation psi)

在Windows编程中,我们通常需要借助通用对话框的力量,今天我们就聊一下“安全属性表”通用对话框的使用心得。 当我们调用EditSecurity函数时: 1.EditSecurity将调用ISecurityInformation中的GetObjectInformation函数 在编写 ISecurityInf…

数据分析异步进阶:aiohttp与Asyncio性能提升

一、时间轴呈现方案进程 2023-04-01:需求确认 确定目标:使用aiohttp与Asyncio提升采集性能,目标采集今日头条网站的新闻数据(标题、内容、时间等)。同时要求在程序中加入代理IP、Cookie和UserAgent的设置,…

《AI大模型趣味实战 》第8集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 2

《AI大模型趣味实战 》第8集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 2 摘要 本文末尾介绍了如何实现新闻智能体的方法。在信息爆炸的时代,如何高效获取和筛选感兴趣的新闻内容成为一个现实问题。本文将带领读者通过P…

低配电脑畅玩《怪物猎人:荒野》,ToDesk云电脑优化从30帧到144帧?

《怪物猎人:荒野(Monster Hunter Wilds)》自2025年正式发售以来已取得相当亮眼的成绩,仅用三天时间便轻松突破800万销量,目前顺利蝉联周榜冠军;凭借着开放世界的宏大场景和丰富的狩猎玩法,该游戏…

【js逆向入门】图灵爬虫练习平台 第九题

地址:aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12进入了debugger,右击选择一律不在此处暂停, 点击继续执行 查看请求信息 查看载荷,2个加密参数,m和tt 查看启动器,打上断点 进来 往…

NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的启动流程 区别: .NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】_vscode webapi-CSDN博客 2、WebApplicationBuilder:是NET6引入的一个类,是建造者模式的典型应用 1>建造者模式的…

Nginx及前端部署全流程:初始化配置到生产环境部署(附Nginx常用命令)

nginx&前端从初始化配置到部署(xshell) 前言下载nginx前端打包与创建具体文件夹路径配置nginx.nginx.conf文件配置项内容 配置nginx.service文件配置项内容 启动nginx常用nginx命令 前言 目标:在xshell中部署前端包。 第一步&#xff1a…