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

news2024/12/16 5:17:41

背景

一直想真正了解大模型对硬件资源的需求,于是准备详细看一篇视频,将核心要点总结记录下。本文内容参考视频:保姆级教程: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 torch

def 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.coloradmin.cn/o/2260315.html

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

相关文章

现代密码学总结(上篇)

现代密码学总结 &#xff08;v.1.0.0版本&#xff09;之后会更新内容 基本说明&#xff1a; ∙ \bullet ∙如果 A A A是随机算法&#xff0c; y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …

Python中opencv的一些函数及应用

Sobel 算子函数 功能&#xff1a; Sobel 算子用于计算图像的梯度&#xff08;变化率&#xff09;&#xff0c;常用于边缘检测。它通过对图像应用一个基于一阶导数的滤波器来强调图像中的边缘部分&#xff0c;特别是水平和垂直方向上的边缘。通过计算图像的梯度&#xff0c;可以…

【docker】springboot 服务提交至docker

准备docker &#xff08;不是docker hub或者harbor&#xff0c;就是可以运行docker run的服务&#xff09;&#xff0c;首先确保docker已经安装。 本文以linux下举例说明&#xff1a; systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…

XDOJ 877 图的深度优先遍历

题目&#xff1a;图的深度优先遍历 问题描述 已知无向图的邻接矩阵&#xff0c;以该矩阵为基础&#xff0c;给出深度优先搜索遍历序列&#xff0c;并且给出该无向图的连通分量的个数。在遍历时&#xff0c;当有多个点可选时&#xff0c;优先选择编号小的顶点。&#xff08;即…

大屏开源项目go-view二次开发1----环境搭建(C#)

最近公司要求做一个大屏的程序用于展示公司的产品&#xff0c;我以前也没有相关的经验&#xff0c;最糟糕的是公司没有UI设计的人员&#xff0c;领导就一句话要展示公司的产品&#xff0c;具体展示的内容细节也不知道&#xff0c;全凭借自己发挥。刚开始做时是用wpf做的&#x…

摆脱B端UI框架的桎梏,首先从布局开始

在 B 端开发中&#xff0c;UI 框架虽带来便利&#xff0c;但也可能形成桎梏。要摆脱这种束缚&#xff0c;首先从布局着手是个明智之举。传统的 B 端 UI 框架布局可能较为固定&#xff0c;缺乏灵活性。我们可以尝试创新的布局方式&#xff0c;如响应式设计&#xff0c;适应不同屏…

认识异常吧

在 Java 中&#xff0c;将程序执行过程中发生的不正常行为称为异常 。 异常的体系结构 1. Throwable &#xff1a; 是异常体系的顶层类&#xff0c;其派生出两个重要的子类 , Error&#xff08;错误&#xff09; 和 Exception&#xff08;异常&#xff09; 2. Error &…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道&#xff0c;Git是用来管理某一个仓库&#xff0c;那当一个项目用到了多个仓库时&#xff0c;怎么来同步管理这些仓库呢&#xff1f;这个时候就可以引入Repo管理。 Repo介绍 …

Spring Security6.3 自定义AuthorizationManager问题

项目环境&#xff1a; Springboot3.3.5, 对应的SpringFrameWork6.1&#xff0c;Security为6.3 问题&#xff1a;我想自定义AuthorizationManager接口实现类&#xff0c;在里面判断如果角色为amdin则放行请求&#xff1b; 在AdminAuthorizationManager类的check()方法中pass变量…

十二月第三周python

import tkinter as tk #安装图形窗口工具 import cv2 #处理视频工具 from tkinter import * #安装图形窗口工具 from PIL import Image, ImageTk#处理图形工具 roottk.Tk() #给工具起名字 root.title("子豪")#软件左上角名字 root.geometry("800x800500100&…

玉米叶病预测数据集,使用yolo,coco,voc格式人工标注,10046张原始图片,可识别叶枯病,普通锈病,灰叶斑病,健康的玉米叶

玉米叶病预测数据集&#xff0c;使用yolo&#xff0c;coco&#xff0c;voc格式人工标注&#xff0c;10046张原始图片&#xff0c;可识别叶枯病,普通锈病&#xff0c;灰叶斑病&#xff0c;健康的玉米叶 数据集分割 训练组87&#xff05; 8790图片 有效集4% 419图片…

NAT网络地址转化技术

1.什么是NAT NAT技术是一种将自己内网的多个私有IP地址转换为一个公网IP进行访问互联网的一项技术&#xff0c;这个技术主要是用来解决IPv4地址不够的问题。 2.NAT技术的具体例子 如果我们用手机使用流量浏览一个网站&#xff0c;那么第一步手机会对这个域名进行DNS解析&#…

使用DuckDB 加载和清洗数据

DuckDB CLI是允许用户直接从命令行与DuckDB交互的工具。前文你看到了如何使用Python与DuckDB交互。但是&#xff0c;有时你只是想直接使用数据库—例如在创建新表、从不同数据源导入数据以及执行与数据库相关的任务时。在这种情况下&#xff0c;直接使用DuckDB CLI要有效得多。…

linux部署ansible自动化运维

ansible自动化运维 1&#xff0c;编写ansible的仓库&#xff08;比赛已经安装&#xff0c;无需关注&#xff09; 1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定 2、将ansible.iso的光盘连接上&#xff08;右下角呈绿色状态&#xff09; 3、查看光盘挂载信息 df -h…

vue3-tp8-Element:对话框实现

效果 参考框架 Dialog 对话框 | Element Plus 具体实现 一、建立view页面 /src/views/TestView.vue 二、将路径写入路由 /src/router/index.js import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vueconst router create…

YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构

摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…

Python数据分析案例67——因子分析回归分析

背景 线性回归&#xff0c;主成分回归都做烂了&#xff0c;我之前的案例有很多这些模型&#xff0c;但是一直没写因子分析的回归案例&#xff0c;这个也是传统统计学流行的方法&#xff0c;在金融经济心理学等人文社科用得非常多。这个案例就演示一下python怎么做因子分析。 数…

FastAPI简介

FastAPI简介 一、FastAPI简介二、FastAPI安装2.1 使用pip安装FastAPI2.2 FastAPI的demo2.3 FastAPI的程序结构 三、装饰器请求方法四、用户请求4.1 路径参数4.1.1 单个路径参数4.1.2 多个路径参数4.1.3 固定路径和路径参数的冲突 4.2 查询参数4.3 默认参数4.4 可选参数 五、请求…

Django结合websocket实现分组的多人聊天

其他地方和上一篇大致相同&#xff0c;上一篇地址点击进入, 改动点1&#xff1a;在setting.py中最后再添加如下配置&#xff1a; # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…

基础学习:(5)不同卷积:transposed convolution,deconvolution,dilated convolution

基础学习&#xff1a;&#xff08;5&#xff09;不同卷积 文章目录 基础学习&#xff1a;&#xff08;5&#xff09;不同卷积前言1 deconvlution transposed convolution2 对比2.1 Convolution animations2.2 Transposed convolution animations2.3 Dilated convolution 前言 …