(使用24GB显存运行Llama-3.1-8B大模型)Python程序使用modelscope和huggingface的transformers导入调用Llama-3.1-8B-Instruct模型

文章目录

正常导入Llama

正常情况下,使用如下代码导入meta-llama/Llama-3.1-8B-Instruct

#需要安装transformers库,pip install即可。from transformers import AutoModelForCausalLM, AutoTokenizer model_name ="meta-llama/Llama-3.1-8B-Instruct"#要导入的大模型名称。 model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_name)

但是书接上文,https://liubingqing.blog.ZEEKLOG.net/article/details/149274975?spm=1011.2415.3001.5331,Llama系列的模型,想要导入是需要申请的,需要在huggingface官网上写一个申请表,而中国大陆这边一般都无法通过申请,申请结果会是reject(不是梯子的问题),所以上述代码无法成功导入。

使用modelscope下载

modelscope是阿里巴巴推出的。在这里可以下载meta-llama/Llama-3.1-8B-Instruct。

#需要安装modelscope库,pip install即可。from modelscope import snapshot_download 
model_id=snapshot_download("LLM-Research/Meta-Llama-3.1-8B-Instruct",cache_dir="~/modelscope")#将下载的大模型存放在cache_dir目录下。print("model:",model_id)

这个下载需要蛮久的,我花了一两个小时,30个G,也是无语了。

下载好了之后,我们看一下下载的文件。大家可以看到modelscope目录下面有如下目录。

LLM-Research/Meta-Llama-3___1-8B-Instruct

该目录下面有如下文件。

在这里插入图片描述


上面有config.json文件,到时候导入大模型的时候我们就使用config.json文件所在的目录。

使用transformers导入

from transformers import AutoModelForCausalLM, AutoTokenizer model_dir ="~/modelscope/LLM-Research/Meta-Llama-3___1-8B-Instruct" model = AutoModelForCausalLM.from_pretrained(model_dir) tokenizer = AutoTokenizer.from_pretrained(model_dir)

这个时候有可能会报错,如下:

AutoModelForCausalLM TypeError: argument of type ‘NoneType’ is not iterable

解决办法可以参考:https://github.com/SWivid/F5-TTS/issues/1082,https://github.com/huggingface/transformers/issues/38340。他们说这是一个bug,解决办法就是降低transformers的版本,如下:

pip install transformers==4.51.3

安装完了低版本之后,重新运行上述代码,如果jupyter notebook需要重启内核再运行上述代码。发现可以成功导入。

在这里插入图片描述
在这里插入图片描述

24GB显存导入

可以看到的是,上述代码,大模型默认是放在cpu上的,模型的参数的精度是float32,如果你想要将这个8B的模型放到24GB显存的GPU上,例如3090,4090,是不行的,显存不够,8B的模型默认大概需要30GB的显存。

那怎么办呢?我们将精度由默认的float32降低为float16,此时需要的显存会降低一半,也就是大概15GB。

import torch device = torch.device("cuda:2") model=model.half().to(device)

在 PyTorch 中,half() 是将张量数据类型转换为 16 位浮点型(即半精度浮点型)的方法。半精度浮点型比单精度浮点型占用更少的内存空间,但相应的精度也会受到一定的影响。看下面代码:

class Model(nn.Module): def __init__(self): super(Model,self).__init__() self.linear=nn.Linear(3,5) def forward(self,x): return self.linear(x)model=Model()#默认是float32model=model.half()#数据类型转化为float16#如果再继续half()呢?不变,还是float16model=model.half()#还是float16#也就是说,half一定变成float16### 拓展model=model.double()#double一定变成float64model=model.float()#float一定变成float32,这是默认的.

在给定模型的情况下,将模型的参数和计算结果使用半精度浮点型进行存储和计算可以显著减少 GPU 内存的使用,从而允许更大的 batch size 和更深的网络结构,加速训练过程。但需要注意的是,在某些场景下,使用半精度浮点型可能会降低模型的精度和收敛速度,因此需要根据具体情况进行权衡和选择。

还是上面这个例子,我们查看一下float32和float16情况下模型的权重(self.linear线性层那个权重)

tensor([[-0.4974, -0.5157, 0.4132],
[ 0.4699, 0.2312, 0.0953],
[ 0.1286, 0.5104, -0.1663],
[-0.5107, -0.3395, -0.0041],
[ 0.1334, -0.3829, 0.4807]]
tensor([[-0.4973, -0.5156, 0.4133],
[ 0.4700, 0.2312, 0.0953],
[ 0.1287, 0.5103, -0.1664],
[-0.5107, -0.3394, -0.0041],
[ 0.1334, -0.3828, 0.4807]]

大家发现没有,我们把精度变小了,有几个数值发生了变化,例如第一行0.4132变成了 0.4133.但是我们也发现,这种变化是很微小的,通常不会对模型的推理有太大影响.

所以,好处更加明显,那就是通过float16,相比于float32,我们可以把显存降低了一半.一般一个8B的大模型,如果你按照默认的float32,24GB的显存是放不下的,这个时候选用float16就可以.

拓展

另外,还记得我们之前的那个导入代码吗?我们可以填入以下参数torch_dtype="auto",其也会自动将模型的参数精度变成16位浮点数。

model = AutoModelForCausalLM.from_pretrained(model_dir,torch_dtype="auto")next(model.parameters()).dtype 

结果如下:

torch.bfloat16

也可以在24GB的GPU中导入。


有人说,我就是不想要将精度将为一半,就是要float32,那么怎么办呢?可以使用如下参数device_map="auto"

model = AutoModelForCausalLM.from_pretrained(model_dir,device_map="auto")

这个参数`device_map="auto"会将模型的各个层放在不同的GPU上,自动的。这样,虽然我们一个GPU 24GB装不下8B的模型,但是多个GPU可以呀。

大家可以使用nvidia-smi看看显卡占用情况,会发现,多个显卡都在运行自己的程序。


完结撒花


Read more

一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC

一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC 在当今这个信息爆炸的数字时代,我们无时无刻不被各种形式的内容所包围——从短视频、直播到图文资讯、专业评测。你或许经常听到UGC、PGC、AIGC这些听起来很“高级”的缩写,但它们究竟代表什么?彼此之间又有什么区别和联系?今天,就让我们一次性说清楚内容创作领域的各种“GC”(Generated Content)。 文章目录 * 一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC * 1 核心区别:是“谁”在创作内容? * 2 UGC (User Generated Content) - 用户生成内容 * 3 PGC (Professionally Generated Content) - 专业生成内容 * 4

AI绘画工具管理神器:StabilityMatrix终极配置与使用全攻略

AI绘画工具管理神器:StabilityMatrix终极配置与使用全攻略 【免费下载链接】StabilityMatrixMulti-Platform Package Manager for Stable Diffusion 项目地址: https://gitcode.com/gh_mirrors/st/StabilityMatrix 想要轻松驾驭AI绘画世界却苦于复杂的工具配置?StabilityMatrix作为专业的AI绘画包管理器,为您提供一站式解决方案。这款免费工具让您彻底告别繁琐的安装流程,专注于艺术创作本身。 为什么选择StabilityMatrix? 解决AI绘画入门痛点 * 告别复杂的依赖项安装 * 统一管理多种AI模型和插件 * 跨平台支持,随时随地创作 智能管理体验 StabilityMatrix通过直观的界面设计,让模型下载、版本更新变得简单高效。无论您是Windows、macOS还是Linux用户,都能获得一致的优质体验。 快速部署指南 环境准备清单 * 确保系统有2-3GB可用空间(基础安装) * 完整使用建议预留10-50GB存

多模态模型Qwen3-VL在Llama-Factory嵌套量化QLoRA训练+测试+导出+部署(Ollama/LMDeploy)全流程--以具身智能数据集open-eqa为例

多模态模型Qwen3-VL在Llama-Factory嵌套量化QLoRA训练+测试+导出+部署(Ollama/LMDeploy)全流程--以具身智能数据集open-eqa为例

前期环境配置等准备可参考教程: 多模态模型Qwen3-VL在Llama-Factory中断LoRA微调训练+测试+导出+部署全流程--以具身智能数据集open-eqa为例 这里数据来源 Open-EQA 多模态具身智能数据集,经过处理每个样本八张图片,划分为训练-验证集和测试集。 若对下载和处理open-eqa数据集代码有兴趣,可以通过网盘分享的文件:OpenEQACode.zip 链接: https://pan.baidu.com/s/1DqmIp1Xw6HJPX77O-iOXdQ?pwd=dgn8 提取码: dgn8 如果不方便下载和处理open-eqa数据集,可以通过网盘分享的文件:OpenEQA8s.zip 链接: https://pan.baidu.com/s/1_6G4YwI5tmYXUSDLssJ13A?pwd=hfvw 提取码: hfvw 1.微调训练 有cuda显卡可以执行pip install unsloth可以安装Unsloth加快训练和推理 执行pip install tensorboard安装保存完整训练过程的数据,避免中断只能部分曲线

Claude部署(copilot反向代理)

一、教育邮箱认证 1、进行教育邮箱认证可免费使用claude pro 2年,有机会的话可以进行认证,无法教育认证的话只能花钱充claude的会员了,如何进行教育认证可观看该Up的视频 超简单一次通过Github学生认证,逐步详细视频教程_哔哩哔哩_bilibili 2、教育认证通过后在GitHub个人主页下的Copilot/Features中开启Copilot Pro 二、服务器上配置Copilot反向代理 1、配置nodejs环境 在官网https://nodejs.org/en/download/package-manager,下载nodejs安装包(Linux) 下载完成后将压缩包传到服务器上进行解压,目录如下 创建软连接,使得在任意目录下都可以试用直接使用node命令和npm命令 ln -s /root/node-v24.13.1-linux-x64/bin/node /usr/local/bin/node ln -s /root/node-v24.13.