LLM学习笔记1——本地部署Meta-Llama-3.2-1B大模型
系列文章目录
参考博客
参考博客
文章目录
- 系列文章目录
- 前言与调用
- 一、部署要求
- 二、实现步骤
- 0.深度学习环境
- 错误1,验证pytorch版本时提示以下问题:
- 错误2,验证pytorch版本时提示以下问题:
- 错误3,有时候还会提示你有一些库没有安装,使用pip安装即可。
- 1.transformers库安装
- 使用pip安装
- 2.模型下载
- 3.模型调用
- 三、模型结构
- 四、总结
前言与调用
从Transformer架构的出现,到GPT与BERT系列,再到GPT3.5、文心的发布,再到Llama、Qwen、gemma、deepseek等开源。
一、Hugging Face的Transformers
这是一个强大的Python库,专为简化本地运行LLM而设计。其优势在于自动模型下载、提供丰富的代码片段,以及非常适合实验和学习。然而,它要求用户对机器学习和自然语言处理有深入了解,同时还需要编码和配置技能。
二、Llama.cpp
基于C++的推理引擎,专为Apple Silicon打造,能够运行Meta的Llama2模型。它在GPU和CPU上的推理性能均得到优化。Llama.cpp的优点在于其高性能,支持在适度的硬件上运行大型模型(如Llama 7B),并提供绑定,允许您使用其他语言构建AI应用程序。其缺点是模型支持有限,且需要构建工具。
三、Llamafile
由Mozilla开发的C++工具,基于llama.cpp库,为开发人员提供了创建、加载和运行LLM模型所需的各种功能。它简化了与LLM的交互,使开发人员能够轻松实现各种复杂的应用场景。Llamafile的优点在于其速度与Llama.cpp相当,并且可以构建一个嵌入模型的单个可执行文件。然而,由于项目仍处于早期阶段,不是所有模型都受支持,只限于Llama.cpp支持的模型。
四、Ollama
作为Llama.cpp和Llamafile的用户友好替代品,Ollama提供了一个可执行文件,可在您的机器上安装一个服务。安装完成后,只需简单地在终端中运行即可。其优点在于易于安装和使用,支持llama和vicuña模型,并且运行速度极快。然而,Ollama的模型库有限,需要用户自己管理模型。
五、vLLM
这是一个高吞吐量、内存高效的大型语言模型(LLMs)推理和服务引擎。它的目标是为所有人提供简便、快捷、经济的LLM服务。vLLM的优点包括高效的服务吞吐量、支持多种模型以及内存高效。然而,为了确保其性能,用户需要确保设备具备GPU、CUDA或RoCm。
六、TGI(Text Generation Inference)
由HuggingFace推出的大模型推理部署框架,支持主流大模型和量化方案。TGI结合Rust和Python,旨在实现服务效率和业务灵活性的平衡。它具备许多特性,如简单的启动LLM、快速响应和高效的推理等。通过TGI,用户可以轻松地在本地部署和运行大型语言模型,满足各种业务需求。经过优化处理的TGI和Transformer推理代码在性能上存在差异,这些差异体现在多个层面:
并行计算能力:TGI与Transformer均支持并行计算,但TGI更进一步,通过Rust与Python的联合运用,实现了服务效率与业务灵活性的完美平衡。这使得TGI在处理大型语言模型时,能够更高效地运用计算资源,显著提升推理效率。
创新优化策略:TGI采纳了一系列先进的优化技术,如Flash Attention、Paged Attention等,这些技术极大地提升了推理的效率和性能。而传统的Transformer模型可能未能融入这些创新优化。
模型部署支持:TGI支持GPTQ模型服务的部署,使我们能在单卡上运行启用continuous batching功能的更大规模模型。传统的Transformer模型则可能缺乏此类支持。
尽管TGI在某些方面优于传统Transformer推理,但并不意味着应完全放弃Transformer推理。在特定场景下,如任务或数据与TGI优化策略不符,使用传统Transformer推理可能更合适。当前测试表明,TGI的推理速度暂时逊于vLLM。TGI推理支持以容器化方式运行,为用户提供了更为灵活和高效的部署选项。
七、DeepSpeed
微软精心打造的开源深度学习优化库,以系统优化和压缩为核心,深度优化硬件设备、操作系统和框架等多个层面,更利用模型和数据压缩技术,极大提升了大规模模型的推理和训练效率。DeepSpeed-Inference,作为DeepSpeed在推理领域的扩展,特别针对大语言模型设计。它巧妙运用模型并行、张量并行和流水线并行等技术,显著提升了推理性能并降低了延迟。
本博客尝试只使用Hugging Face的Transformers库调用模型,看看能否实现简洁的调用。
一、部署要求
部署要求

二、实现步骤
0.深度学习环境
深度学习环境搭建,参考往期博文
因为LLM使用的环境可能会更新更高,所以使用的基础环境如下:
NVIDIA-SMI 525.60.11
cuda 12.1.0
cudnn 8.9.2
根据cuda版本选择对应的pytorch、torchvision、python环境。
以下版本截止2024年4月29日:
直接选择最新的那一档,cuda12.1,Python3.10,PyTorch2.2.0,torchvision0.17.0。

使用anaconda安装以下内容,安装方式参考往期博文:
python 3.10
PyTorch 2.2.0
torchvision 0.17.0
错误1,验证pytorch版本时提示以下问题:
OSError: libmkl_intel_lp64.so: cannot open shared object file: No such file or directory

修改环境变量配置文件:
gedit ~/.bashrc
在~/.bashrc文件末尾另起一行添加:
export LD_LIBRARY_PATH=/home/xxx/anaconda3/lib:$LD_LIBRARY_PATH
更新环境变量配置文件:
source ~/.bashrc
查看是否更新成功:
echo $LD_LIBRARY_PATH
# 输出必须带有/home/xxx/anaconda3/lib才算成功
错误2,验证pytorch版本时提示以下问题:
OSError: libcudart.so.12: cannot open shared object file: No such file or directory
1、确认CUDA和cudnn是否正确安装,版本是否对应。
# 查看当前cuda的版本
nvcc --version
#查看cudnn版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
2、如果确定安装了对应版本的CUDA和cudnn,查看 ~/.bashrc环境变量是否正确包含了 对应的库文件路径。
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
3、如果安装了CUDA和cudnn,确定版本正确,成功链接,那么移动或者重写 ~/.bashrc环境变量中的CUDA和cudnn库文件路径,然后更新。
错误3,有时候还会提示你有一些库没有安装,使用pip安装即可。
1.transformers库安装
使用pip安装
huggingface的Transformers库要求的深度学习环境版本如下:
Python 3.8+
Flax 0.4.1+ / PyTorch 1.11+ / TensorFlow 2.6+
建议尽量在anaconda虚拟环境中安装Transformers库。
首先,创建一个3.10版本的虚拟环境并激活:
conda create -n your_env_name python=3.10
source activate your_env_name
然后,在虚拟环境中安装Flax 0.4.1+或PyTorch 1.11+或TensorFlow 2.6+神经网络算法库(选择其中之一):
具体安装方法,参考往期博文
最后,安装Transformers库:
# transformers >= 4.43.0
pip install transformers
提示成功安装Transformers库和大部分依赖库,但有个别依赖库安装失败,比如Pillow库:


单独安装Pillow库:
pip install Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn
如果还提示却别的库也是这样安装就好。
查看虚拟环境中的库:
conda list

2.模型下载
大部分模型都可以在huggingface网站下载,直接点击Clone repository选项,选择git方式下载:
Llama-3.2-1B模型huggingface下载地址

git clone https://huggingface.co/meta-llama/Llama-3.2-1B
用这种方法下载不仅需要上外网,而且下载速度还会比较慢,除此之外有一些模型下载使用还需要向官方申请许可,比如:

这里使用一些取巧的方法:
使用国内阿里的大模型平台modelscope魔搭网站下载
Llama-3.2-1B模型modelscope下载地址modelscope,直接点击模型文件,点击下载模型:

它会提供一些不同的下载命令:

这里直接使用modelscope库下载:
# 先安装modelscope库
pip install modelscope# 不加–local_dir选项,会使得模型保存在临时文件(/home/xxx/.cache/modelscope/hub)中,不方便查找
modelscope download --model LLM-Research/Llama-3.2-1B# 加上–local_dir选项,使得模型保存在指定文件夹文件(/home/xxx/LLM-Research/Meta-Llama-3.2-1B-Instruct)中,方便查找
modelscope download --model LLM-Research/Llama-3.2-1B --local_dir /home/xxx/Llama-3.2-1B

这样在绕过许可证的同时,也能避免外网问题,快速下载。
3.模型调用
使用以下代码可以简单调用这个模型:
from transformers import AutoModelForCausalLM, AutoTokenizerdef load_model_and_tokenizer(model_directory):"""从本地目录加载模型和分词器。"""tokenizer = AutoTokenizer.from_pretrained(model_directory)# 添加特殊的填充令牌tokenizer.add_special_tokens({'pad_token': '[PAD]'})model = AutoModelForCausalLM.from_pretrained(model_directory)# model.half()return model, tokenizerdef generate_text(model, tokenizer, prompt, max_new_tokens):"""使用提供的模型和分词器生成文本。"""# 编码输入提示inputs = tokenizer(prompt, return_tensors='pt', padding=True, truncation=True)input_ids = inputs['input_ids']attention_mask = inputs['attention_mask']# 生成文本output = model.generate(input_ids=input_ids,attention_mask=attention_mask,max_new_tokens=max_new_tokens,pad_token_id=tokenizer.eos_token_id,no_repeat_ngram_size=2,repetition_penalty=1.5,top_k=50,top_p=0.95,temperature=1.0,do_sample=True,num_return_sequences=1,num_beams=2, # 设置 num_beams > 1early_stopping=True)# 解码生成的文本generated_text = tokenizer.decode(output[0], skip_special_tokens=True)return generated_textdef chat_with_model(model, tokenizer, max_new_tokens):"""与模型进行聊天对话。"""print("Chat with the model! Type 'exit' to end the conversation.")prompt = "You are an Intelligent Traffic Rules Q&A Assistant, and when user ask you questions, you will provide me with traffic knowledge.Next, user will ask you questions, please answer them.\n"# once_input = input("User1:")## if once_input.lower() == 'exit':# print("Assistant: Goodbye! Stay safe on the roads!")# exit()## input_to_model = prompt + "\nUser2:" + once_input + "\nAssistant"## response = generate_text(model, tokenizer, input_to_model, max_new_tokens)print("111", prompt)while True:user_input = input("User3: ")if user_input.lower() == 'exit':print("Assistant: Goodbye! Stay safe on the roads!")breakinput_to_model = prompt + user_input + "\nAssistant"# 更新对话历史# 生成模型的回答response = generate_text(model, tokenizer, input_to_model, max_new_tokens)print(response)def main():model_directory = "/LLM/Llama-3.2-1B/"max_new_tokens = 100 # 生成新 token 的最大数量# 加载模型和分词器model, tokenizer = load_model_and_tokenizer(model_directory)# 确保模型处于评估模式model.eval()# 开始聊天对话chat_with_model(model, tokenizer, max_new_tokens)if __name__ == "__main__":main()
简单问答:

三、模型结构
未完待续。。。
四、总结
一方面Meta-Llama-3.2-1B太小,很多回答都是胡言乱语,另一方面对模型的调用只依靠了一个Hugging Face的Transformers库,实际的使用体验相当不好,想要更好的体验可能需要在更工程化的框架下去调用模型,比如ollama等。
这篇博客记录于2024年,Meta-Llama-3.2发布不久,看见有1B的模型就心血来潮测试了一下,测试完后因为工作忙碌就忘记发布了,直到24年年末的deepseekV3以及今年过年时的R1如此出圈爆火,打算年后回来测试一下,才发现这篇博客被遗忘了。
后续有时间会继续更新学习有关llama的模型结构。
相关文章:
LLM学习笔记1——本地部署Meta-Llama-3.2-1B大模型
系列文章目录 参考博客 参考博客 文章目录 系列文章目录前言与调用一、部署要求二、实现步骤0.深度学习环境错误1,验证pytorch版本时提示以下问题:错误2,验证pytorch版本时提示以下问题:错误3,有时候还会提示你有一些…...
RNN-day1-NLP基础
NLP基础 一、基本概念 自然语言处理:Natural Language Processing,主要目标是让计算机能够理解、解释和生成人类语言的数据。 1 基本概念 1.1NLP概念 语言:人类沟通的机构化系统,包括声音、书写符号、手势 自然语言:自然进化…...
常见string库中的函数(C语言超详细)
文章目录 strcspnstrcpystrncpystrcatstrncatstrcmpstrncmpstrchrstrrchrstrstrstrtokstrlenstrnlen strcspn 原型: size_t strcspn(const char *str1, const char *str2);功能: strcspn 会扫描 str1,并返回一个整数,表示 str1 中第一个匹配…...
AI安全最佳实践:AI应用开发安全评估矩阵(上)
生成式AI开发安全范围矩阵简介 生成式AI目前可以说是当下最热门的技术,吸引各大全球企业的关注,并在全球各行各业中带来浪潮般的编个。随时AI能力的飞跃,大语言模型LLM参数达到千亿级别,它和Transformer神经网络共同驱动了我们工…...
deepseek+kimi自动生成ppt
打开deepseek官网,输入详细的需求,让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦,下载编辑使用吧...
# C指针地址CUP寄存器访问IO内存映射
C指针地址&CUP寄存器访问&IO内存映射 在裸机编程中,C语言可以像汇编语言一样直接操作芯片寄存器地址进行读取和写入,主要是由于以下几个原因: 1. 裸机环境下没有操作系统的干预 裸机编程是指直接在硬件上运行程序,没有…...
《薄世宁医学通识50讲》以医学通识为主题,涵盖了医学的多个方面,包括医学哲学、疾病认知、治疗过程、医患关系、公共卫生等
《薄世宁医学通识50讲》是一门由薄世宁医生主讲的医学通识课程,该课程旨在通过深入浅出的方式,向广大听众普及医学知识,提升公众对医学的认知和理解。 晓北斗推荐-薄世宁医学通识 以下是对该课程的详细介绍: 一、课程概述 《薄世…...
突破与重塑:逃离Java舒适区,借Go语言复刻Redis的自我突破和成长
文章目录 写在文章开头为什么想尝试用go复刻redis复刻redis的心路历程程序员对于舒适区的一点看法关于mini-redis的一些展望结语 写在文章开头 在程序员的技术生涯长河中,我们常常会在熟悉的领域中建立起自己的“舒适区”。于我而言,Java 就是这片承载…...
解决_ssl.so: cannot open shared object file: No such file or directory
背景: 我在CentOS8.2的操作系统里安装完python2.7后,源码安装了OpenSSL_1_1_1-stable 下载地址: https://github.com/openssl/openssl/tree/OpenSSL_1_1_1-stable 现象: 结果python导入ssl的时候报错了,报找不到_ssl.…...
优惠券平台(一):基于责任链模式创建优惠券模板
前景概要 系统的主要实现是优惠券的相关业务,所以对于用户管理的实现我们简单用拦截器在触发接口前创建一个单一用户。 // 用户属于非核心功能,这里先通过模拟的形式代替。后续如果需要后管展示,会重构该代码 UserInfoDTO userInfoDTO new…...
【Pytorch实战教程】PyTorch中的Dataset用法详解
PyTorch中的Dataset用法详解 在深度学习中,数据是模型训练的基石。PyTorch作为一个强大的深度学习框架,提供了丰富的工具来处理和加载数据。其中,Dataset类是PyTorch中用于处理数据的重要工具之一。本文将详细介绍Dataset的用法,帮助你更好地理解和使用它。 1. 什么是Dat…...
单例设计模式(Java)
(部分内容参考于菜鸟教程当中关于单例模式的说明) 什么是单例设计模式? 单例模式(Singleton Pattern)是一种常见的设计模式,其主要目的是确保一个类在系统中只有一个实例,并提供全局访问点。使…...
TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...
全文链接:https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现,通过MNIST和Blobs等数据集进行实验,对比了不同训练方式(仅源域训练、域对抗训练等&am…...
09vue3实战-----引入element-plus组件库中的图标
09vue3实战-----引入element-plus组件库中的图标 1.安装2.引入3.优化 element-plus中的icon图标组件的使用和其他平台组件(如el-button按钮)是不一样的。 1.安装 npm install element-plus/icons-vue2.引入 在这我们只讲述最方便的一种引入方法------完整引入。这需要从elem…...
DeepSeek vs. ChatGPT:不同的诞生时间,对人工智能发展的不同影响
DeepSeek vs. ChatGPT:不同的诞生时间,对人工智能发展的不同影响 ChatGPT 和 DeepSeek 诞生于不同的时间节点,代表了人工智能不同阶段的发展方向。它们在技术、应用以及对AI发展趋势的影响方面各有侧重。 1. 诞生时间与背景 ChatGPT&#x…...
如何导入第三方sdk | 引入第三方jar 包
0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能,会拿到第三方的sdk,也就是jar包,如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包,上传到私有的仓库,这样直接正常在pom引用即可如果只…...
消费电子产品中的噪声对TPS54202的影响
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、概述 在白色家电领域,降压转换器的应用非常广泛,为了实现不同的功能就需要不同的电源轨。TPS542…...
[Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】
文章目录 [Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】引言使用渠道一:硅基流动 Chatbox AI【推荐】硅基流动 Chatbox AI的优势 使用渠道二:秘塔AI搜索秘塔AI搜索的优势 其它方案1. DeepSeek官网2. 纳…...
Websocket从原理到实战
引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议,它使得客户端和服务器之间能够进行实时、双向的通信,既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…...
学习Cherry Studio AI服务平台,主要是各种功能的实践(deepseek 1.5b和7b的模型+ChatGLM3模型)
Cherry Studio 介绍 Cherry Studio 是一个支持多模型服务的桌面客户端,为专业用户而打造,内置 30 多个行业的智能助手,帮助用户在多种场景下提升工作效率。 CherryStudio内置众多服务商 同时也支持其他兼容OpenAI/Anthropic等API格式的服务…...
【实用教程】在 Android Studio 中连接 MuMu 模拟器
MuMu 模拟器是一个非常流行的安卓模拟器,特别适合开发人员进行应用测试,我使用它的根本原因在于Android Studio自带的AVM实现是太难用了,但是Mumu模拟器启动以后不会自动被Android Studio识别到,但是其他模拟器都是能够正常被Andr…...
Linux 系统搭建 Python 开发环境全流程
Linux 系统搭建 Python 开发环境全流程 Python 解释器下载 Pycharm 对应版本解压安装包进入解压后的目录启动 Pycharm创建桌面快捷方式(可选)Pycharm 配置创建第一个目录第一个程序运行补充 Python 解释器 确保电脑里已经有了python解释器,没…...
VUE小技能:通过 Prop 向子组件传递数据
文章目录 引言Props 声明Prop 校验更改 prop引言 一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute。所有 prop 默认都是可选的,除非声明了 required: true。Props 声明 在使用 <script setup> 的单文件组件中,p…...
第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)
简单来说, Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类,旅客(线程)分别手持登机牌和身份证接受工作人员的检查,示例代码如所示。…...
AtCoder Beginner Contest 392(A-G)题解
A-B:略 C:可能题意比较绕,第i个答案就是穿着i这个号码(也就是Q[j] i,这个时候j这个位置),看向的那个人的号码(也就是P[j]) 代码: void solve() {int n;cin >> n;vi p(n 1…...
如何在macOS上安装Ollama
安装Ollama 安装Ollama的步骤相对简单,以下是基本的安装指南: 访问官方网站:打开浏览器,访问Ollama的官方网站。 下载安装包:根据你的操作系统,选择相应的安装包进行下载。 运行安装程序:下载完…...
【Redisson分布式锁】基于redisson的分布式锁
redisson分布式锁 maven文件: <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.3</version></dependency>实现代码: 分布式锁对象参…...
【区块链】区块链密码学基础
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
【Pycharm+Git+Gitlab】安装部署(粗糙版)
1、安装Git 2、安装Pycharm(这里选择的是社区版) 3、桌面右键打开Git Bash 1)设置全局用户名(准备连接的Gitlab仓库的访问用户名) git config ---global user.name "username"2)设置全局邮箱&…...
