大模型系列4--开源大模型本地部署到微调(WIP)

ops/2024/12/17 11:39:25/

背景

一直想真正了解大模型对硬件资源的需求,于是准备详细看一篇视频,将核心要点总结记录下。本文内容参考视频:保姆级教程:6小时掌握开源大模型本地部署到微调,感谢up主

训练成本

  • 训练 > 微调 > 推理
  • 训练GPT3.5: 1000块80G的A100,训练1个月
    • GP3训练一次:200w到1200w美元
  • 推理:9块80G的A100

对GPU的要求高,对CPU和存储的要求不高
在这里插入图片描述

ChatGLM-6B
少量对话的时
在这里插入图片描述
多轮对话,单机多卡

  • 3090双卡 和 4090单卡价格差不多
    在这里插入图片描述
    A100、A800,H100,H800等对比图
    在这里插入图片描述
    从架构上
  • V100: 2017年 伏特 GPU第6代
  • A100: 2020年 安培 GPU第8代
  • H100: 2022年 赫伯 GPU第9代
  • A100是上一代V100的6倍:在跑 AI 模型时,如果用 PyTorch 框架,相比上一代 V100 芯片,A100 在 BERT 模型的训练上性能提升 6 倍,BERT 推断时性能提升 7 倍。
  • H100是V100的6倍:与上一代 A100 相比,采用 Hopper 的 FP8 Tensor Core 的新 Transformer 引擎使大型语言模型的 AI 训练速度提升 9 倍,AI 推理速度提升 30 倍。针对用于基因组学和蛋白质测序的 Smith-Waterman 算法,Hopper 的新 DPX 指令可将其处理速度提升 7 倍。
  • A800是A100的阉割版本,降低了NVlink带宽,影响不大
  • H800是H100的阉割版本,影响不大

GPU选择

大模型阶段GPU型号

有双精度:不能用4090
训练:不能用4090
微调:最好A100,或者4090多卡
推理:4090,性价比优于A100

4090笔记本:16G显存
4090台式机:24G显存
3090台式机:24G显存,性能是4090的一半
3080台式机:12G显存

单卡:4090 vs A100系列

  • 训练:大模型的参数依赖多卡,参数存储以及GPU通信,对内存容量,内存带宽,通信带宽都是强需,4090不适合
  • 推理:只需要单个模型,4090单卡可行
  • 4090价格是A100的1/100,其计算能力和A100差不多
    在这里插入图片描述
    单卡4090 vs 双卡3090,建议双卡3090
  • 价格差不多
  • 总算力和单张4090持平,显存多了一倍到48GB
  • 双卡流水线效果更好(?)

实验室配置

  • 10w预算:4张4090
  • 20-30w预算:8张4090,或者两张A100 80G
  • 预算不限:8卡 A100
  • 双卡GPU升级路线:3090 -> 4090 -> A100 40G -> A100 80G
  • 一定要买涡轮版,不能买风扇卡,涡轮卡尺寸和高度低,便于多卡

组装机

  • CPU有超频需求,上水冷;否则上风冷
  • 2*3090 搭配 i7-13700
  • 主板:Intel Z系列(高端),B系列(中端),A系列(低端,不要考虑)
  • 硬盘:接口SATA or M.2,建议M.2;协议类型:SATA协议(最高600MB/s),NVME协议(速度快 4GB/s),至少选择PCI-e 4.0
  • 内存:是显存容量的2倍
  • 电源:主要关注功耗,(CPU+GPU)*2,例如 65w CPU加125w GPU,电源一般400w;双GPU卡至少1000w,四GPU卡 1600w
  • 机箱:机箱的长度高出显卡的长度至少30mm

最强算力 H200

  • 显存 141GB,显存带宽 4.8TB/s(相比于A100 3.35TB/s)
  • 内存带宽1.15TB/s 如何理解

个人配置-多卡

GPU: 3090双卡,涡轮版;共48G显存;
CPU:AMD 5900X;12核24线程;
存储: 64GB内存+2T SSD 数据盘;
电源: 1600W单电源;
主板:华硕ROG X570-E;服务级PCE,支持双卡PCIE;
机箱: ROG太阳神601, ATX全塔式大机箱,便于大功率下散热;

租用服务器

平台推荐

在这里插入图片描述

付费GPU在这里插入图片描述

在这里插入图片描述

视频中采用的Windows和Linux双系统,本人更喜欢WSL

安装cuda

cuda driver和cuda runtime API

CUDA提供了两种API,分别是运行时API(CUDA Runtime API)和驱动API(Driver API)

  • 驱动API(Driver API)的版本对应nvidia-smi显示的CUDA Driver结果(该NVIDIA驱动程序所支持的最高CUDA版本),它提供了更细粒度的控制,允许直接与 CUDA 驱动交互。它通常用于需要精细控制的高级应用。
  • 运行时API(CUDA Runtime API)对应于nvcc -V显示的结果,它是一种更高级别的抽象,旨在简化编程过程,它自动处理很多底层细节。大多数 CUDA 程序员使用。

通常情况下,当提到CUDA时,指的是CUDA Runtime版本。

如何查看cuda driver API版本(cuda driver版本)
  • linux使用命令nvidia-smi也可查看driver版本,538.18我安装的具体版本
  • windows环境可以使用nvdia control panel应用并查看系统信息,可以查看该driver版本
    在这里插入图片描述
如何查看cuda runtime API版本(cuda版本)
  • 使用命令nvidia-smi看到的CUDA Version,是指该NVIDIA驱动程序所支持的最高CUDA版本,下图显示的即为支持的最高CUDA版本为12.2,需要安装小于12.2版本的CUDA。
  • 使用nvcc -V可以查看当前安装的cuda版本,可以通过 显示的版本号是小于等于nvidia-smi所显示的cuda版本,这就是二者显示版本不一致的原因。
    在这里插入图片描述
    通过这里CUDA和Driver版本适配关系可以查看适应当前机器的driver版本配套的cuda版本。可以通过cuda tookit下载来下载相应的cuda tookit。 可参考这篇文章
    在这里插入图片描述

安装GPU版本的pytorch

在WSL命令行输入以下命令:

conda create --name pytorch_gpu python=3.11
conda activate pytorch_gpu
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch -c nvidia

测试GPU

import torchdef check_cuda_support():if torch.cuda.is_available():print(f"CUDA is available. Number of GPUs: {torch.cuda.device_count()}")print(f"Current CUDA device: {torch.cuda.current_device()}")print(f"CUDA device name: {torch.cuda.get_device_name(torch.cuda.current_device())}")else:print("CUDA is not available. PyTorch is running on CPU.")if __name__ == "__main__":check_cuda_support()

命令输出
在这里插入图片描述

测试下带宽性能:/usr/local/cuda/extras/demo_suite/bandwidthTest
在这里插入图片描述

在这里插入图片描述

WSL 安装ollama

参照网站提供的帮组:https://github.com/ollama/ollama

  • curl -fsSL https://ollama.com/install.sh | sh

下载hugging face ChatGLM数据集

使用命令git clone https://huggingface.co/THUDM/chatglm-6b进行下载,这个需要科学上网。可以启动windows cmd,然后参照文档代理设置来设置本地代理。命令列表如下:

# 在代码仓库下载目录中,启动windows cmd
set all_proxy=http://127.0.0.1:7890
git clone https://huggingface.co/THUDM/chatglm-6b

微调模型需要多少显存

全量微调

  • model权重
    1B参数,10亿参数,每个参数占用2B,则一共占用2GB
  • 梯度:和model权重类似,也是2GB
  • 优化器:比梯度大很多,以4倍估计,大约是8GB
  • Activation:暂时忽略不计
    常用的全量微调内存消耗约为模型权重的6倍。

高效微调

LoRA模式:base模型+Adapter 2.5%,此时消耗的内存为 2GB + 2.5% * 10GB,约为2.3GB
QLoRA模式:对model权重对2B进一步量化

qwen微调1.B 5GB内存

参考链接:基于qwen的法律大模型微调

下载代码

git clone https://github.com/QwenLM/Qwen.git

安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements_web_demo.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

下载模型

git clone https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git
git clone https://www.modelscope.cn/qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4.git

启动web界面并加载指定目录的模型

python web_demo.py --server-name 0.0.0.0 -c ../Qwen-1_8B-Chat
python web_demo.py --server-name 0.0.0.0 -c ../Qwen-1_8B-Chat --cpu-only

在这里插入图片描述

界面呈现,默认是8000端口

http://localhost:8000/

在这里插入图片描述

下载法律数据集

git clone https://www.modelscope.cn/datasets/Robin021/DISC-Law-SFT.git
选择数据文件,下载 DISC-Law-SFT-Triplet-released.jsonl

转换数据集

将json中的input/ouput条目转换为from user & from assistant的形式

安装微调依赖

pip install "peft<0.8.0" deepspeed  -i https://pypi.tuna.tsinghua.edu.cn/simple

设置model路径和data路径,启动微调

bash finetune/finetune_lora_single_gpu.sh

在这里插入图片描述

安装pip使用清华镜像加速

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

http://www.ppmy.cn/ops/142630.html

相关文章

数据结构——单链表

上一篇中&#xff0c;我们已经了解过了顺序表了&#xff0c;但是&#xff0c;顺序表有哪些不便的地方&#xff1f; 一.顺序表的缺陷问题&#xff1a; 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) 头插N个数据时间复杂度&#xff1a;O(N^2) 需要挪动数据&#xff0c;效…

OpenSource - Shell可视化监控sampler_轻量级实时系统监控工具

文章目录 官网Github导图Sampler&#xff1a;轻量级实时系统监控工具项目简介核心特点快速安装与使用安装步骤配置与运行 组件类型 典型使用场景总结 官网 https://sampler.dev/ Github https://github.com/sqshq/sampler 导图 Sampler&#xff1a;轻量级实时系统监控工具 在…

计算属性 (vue3)

二 实例 1route.query.type

海康萤石摄像机接入EasyNVR流程:开启RTSP-》萤石视频添加到EasyNVR-》未来支持海康SDK协议添加到EasyNVR

EasyNVR目前支持GB28181、RTSP、ONVIF、RTMP&#xff08;推流&#xff09;这几种协议接入&#xff0c;目前正在增加海康HIKSDK、大华DHSDK等几种SDK的接入&#xff0c;我们今天就介绍一下萤石摄像机怎么通过RTSP接入到EasyNVR。 第一步&#xff1a;萤石摄像机开启 萤石设备默…

Cookie,Seesion和Token区别及用途

Cookie&#xff0c;Seesion和Token区别及用途 简介 Cookie、Session、Token 和 JWT&#xff08;JSON Web Token&#xff09;都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处&#xff0c;但在实际应用中有着不同的作用和特点。 Cookie 定义&#…

Ps:视频动作

Ps菜单&#xff1a;窗口/动作 Window/Actions 快捷键&#xff1a;Alt F9 视频动作 Video Actions组中的动作主要用于 Photoshop 的视频编辑&#xff0c;包括创建和反转 Alpha 通道、调整亮度和饱和度以符合广播标准、格式化 NTSC 和 PAL DVD 幻灯片&#xff0c;以及添加标题安…

40 list类 模拟实现

目录 一、list类简介 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;list与string和vector的区别 二、list类使用 &#xff08;一&#xff09;构造函数 &#xff08;二&#xff09;迭代器 &#xff08;三&#xff09;list capacity &#xff08;四&#x…

day 51 第十章 单调栈part02

第十章 单调栈part02 接雨水 接雨水这道题目是 面试中特别高频的一道题&#xff0c;也是单调栈 应用的题目&#xff0c;大家好好做做。 建议是掌握 双指针 和单调栈&#xff0c;因为在面试中 写出单调栈可能 有点难度&#xff0c;但双指针思路更直接一些。 代码随想录 84.…