(使用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

Qwen3-ASR-1.7B实战案例:新闻发布会实时语音转写+关键人物发言自动提取

Qwen3-ASR-1.7B实战案例:新闻发布会实时语音转写+关键人物发言自动提取 1. 项目背景与需求场景 新闻发布会是信息传播的重要场合,但传统的记录方式存在诸多痛点:人工记录容易遗漏关键信息,多人发言时难以准确区分说话人,后期整理需要耗费大量时间。特别是在大型发布会中,多位嘉宾轮流发言,快速准确地记录和提取每个人的讲话内容成为刚需。 Qwen3-ASR-1.7B语音识别系统正是为解决这些问题而生。相比之前的0.6B版本,这个1.7B参数的模型在识别准确率、上下文理解能力和多语言处理方面都有显著提升,特别适合处理新闻发布会这类复杂语音场景。 2. 系统核心能力解析 2.1 高精度语音识别引擎 Qwen3-ASR-1.7B采用深度神经网络架构,具备强大的语音特征提取能力。模型能够准确识别各种口音、语速和发音习惯,即使在有背景噪音的发布会现场也能保持较高的识别准确率。其1.7B的参数量确保了模型对上下文有更好的理解,能够根据语境自动修正识别错误。 2.2 智能说话人分离 系统内置先进的声纹识别技术,能够自动区分不同的说话人。通过分析每个人的声音特征,系统可以为每个发

LLMs:2024-2025 年旗舰 LLM 架构演进解读—大模型的“稀疏革命”与设计哲学:从 DeepSeek 到 Mistral(以及 Gemma、Llama、Qwen、Kimi)的 —— 探索

LLMs:2024-2025 年旗舰 LLM 架构演进解读—大模型的“稀疏革命”与设计哲学:从 DeepSeek 到 Mistral(以及 Gemma、Llama、Qwen、Kimi)的 —— 探索

LLMs:2024-2025 年旗舰 LLM 架构演进解读—大模型的“稀疏革命”与设计哲学:从 DeepSeek 到 Mistral(以及 Gemma、Llama、Qwen、Kimi)的 —— 探索 MoE 的“稀疏革命”、MLA 与 GQA 的 KV-cache 优化、sliding-window 与归一化放置的工程利弊—模型容量、推理成本与实战部署(tokenizer、FlashAttention、移动端 PLE)之间的权衡建议与实践指导 导读:这篇文章是一篇面向工程实践与研究者的综合性综述,横向比较了 2024–2025 年期间若干代表性开源与工业级大语言模型(如 DeepSeek 系列、Mistral、Gemma、Llama、Qwen、

扩散模型详解:从DDPM到Stable Diffusion再到DiT的技术演进

扩散模型详解:从DDPM到Stable Diffusion再到DiT的技术演进

1.摘要 扩散模型(Diffusion Models)作为当前最热门的生成模型之一,已彻底改变图像生成领域,本文从DDPM开始,逐步深入到Stable Diffusion和DiT架构。 扩散模型就像是一个"破坏-修复"的过程,想象一下你有一张美丽的图片,然后一点点地给它加上噪声,直到完全看不清原来的图片,然后让AI学会如何一步步把噪声去掉,重新还原出原始图片。这就是扩散模型的基本思路。 2. DDPM:扩散模型的奠基之作(2020年) 2.1 什么是DDPM? DDPM(Denoising Diffusion Probabilistic Models)是扩散模型的开山鼻祖,由OpenAI团队在2020年提出,它的工作原理: 前向过程(加噪声):从一张清晰的图片开始,逐步添加噪声,最终变成完全随机的噪声图。 反向过程(去噪声):训练AI学会如何一步步去除噪声,从随机噪声中重建出原始图片。 2.2 DDPM的模型结构详解 DDPM的核心是一个U-Net网络结构,U-Net详细架构如下图: