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,有时候还会提示你有一些…...
Nginx反代Ollama接口跨域、无法逐字输出问题
场景 本地部署deepseek模型,用的Ollama管理,内网穿透到公网,在通过nginx反代ollama接口。 问题描述 跨域问题 nginx转发时请求头中需要加入origin,并且origin还要和ollama接口同源(协议、ip、端口一致)。…...
大学资产管理系统中的下载功能设计与实现
大学资产管理系统是高校信息化建设的重要组成部分,它负责记录和管理学校内所有固定资产的信息。随着信息技术的发展,下载功能成为提高资产管理效率的关键环节之一。 系统架构的设计是实现下载功能的基础。一个良好的系统架构能够确保数据的高效传输和存储…...
股指入门:股指期货是什么意思?在哪里可以做股指期货交易?
股指期货是一种以股票指数为标的物的期货合约,也可以称为股票指数期货或期指。 股指期货是什么意思? 股指期货是一种金融衍生品,其标的资产是股票市场上的股指,例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…...
< OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘
Created by Dave On 8Feb.2025 起因: 想下载 StableDiffusion,清理系统文件时把 i/o 搞到 100%,已经删除到 apt 缓存,还差 89MB,只能另想办法。 在网上找能不能挂在 Google 网盘,百度网盘,或 …...
Golang的引用类型和指针
在Golang中,引用类型和指针是两个容易混淆的概念,但它们有本质的区别。理解它们的区别对于编写高效、正确的Go代码至关重要。 1. 引用类型 引用类型是Go语言中某些内置类型的统称,它们的值在传递时共享底层数据,而不是复制数据。…...
51单片机之冯·诺依曼结构
一、概述 8051系列单片机将作为控制应用最基本的内容集成在一个硅片上,其内部结构如图4-1所示。作为单一芯片的计算机,它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU,由运算器和控制器两个部分构成;…...
32. C 语言 安全函数( _s 尾缀)
本章目录 前言什么是安全函数?安全函数的特点主要的安全函数1. 字符串操作安全函数2. 格式化输出安全函数3. 内存操作安全函数4. 其他常用安全函数 安全函数实例示例 1:strcpy_s 和 strcat_s示例 2:memcpy_s示例 3:strtok_s 总结 …...
Android T(13) 源码分析 — BufferQueue 的分析
Android T(13) 源码分析 — BufferQueue 的分析 文章目录 Android T(13) 源码分析 — BufferQueue 的分析前言摘要一、Java 层的 BufferQueue 分析二、原生层的 BufferQueue 分析1、BLASTBufferQueue 的创建2、BLASTBufferQueue 的更新3、Surface 的创建 总结 前言 该系列文章…...
Vite+TS项目中配置路径别名
在使用 Vite 和 TypeScript 的项目中配置路径别名,可以简化模块导入路径,提高代码的可读性和维护性。以下是详细的步骤和示例代码: 1. 配置 Vite 别名 前置条件 下载types/node 下面引入的path会用到 npm install types/node --save-dev原…...
看盘细节系列 篇二:集合竞价的9点18分大单打到3%以下或以上,9点19分撤单
文章目录 系列文章现象原因分析时间点含义正常情况测试市场反应诱导跟风操纵股价意图系列文章 看盘细节系列 篇一:集合竞价尾盘突变 现象 集合竞价中 9 点 18 分通过一笔大单或连续几笔大单将股价打到 3% 以下或以上,9 点 19 分又迅速撤单。从而在分时图上留下一根长长的上…...
Java继承简介
继承的本质:是代码的复用,重复使用已经定义好的方法和域(即全局变量) 要掌握继承首先要了解Java方法的重载和重写 方法的重载和重写 方法的重载 当前方法名相同,但是参数类型不同,发生重载 类比数学函…...
redis之哨兵集群搭建
一:哨兵集群工作概览图 1.监控:sentinel通过心跳监控redis的master和slave实例是否正常工作 2.故障转移:假如master出现故障,sentinel会选举一个slave作为新的master,当故障实例恢复后身份会变成slave,会以…...
保姆级AI开发环境搭建
目录 windows下环境搭建1. Python环境搭建2. 下载vLLM2.1 安装CUDA2.2 安装Pytorch2.3 安装vllm 3. 部署Deepseek(huggingface)3.1 DeepSeek的优化建议 4. ollama快速部署Deepseek4.1 下载Ollama4.2 配置Ollma4.2 运行模型4.3 其他Ollama命令 linux下环境…...
Arduino 型号的对比
常见 Arduino 型号的对比表格 涵盖了不同型号的关键参数和特点,方便你根据项目需求进行选择: 型号Arduino UnoArduino Mega 2560Arduino LeonardoArduino NanoArduino Due微控制器ATmega328PATmega2560ATmega32U4ATmega328P 或 ATmega168SAM3X8E&#…...
Kafka系列之:定位topic只能保存最新数据的原因
Kafka系列之:定位topic只能保存最新数据的原因 一、背景二、定位排查方向三、深入排查一、背景 kafka topic保存的数据少,topic只能保存最新的数据二、定位排查方向 能想到的定位排查方向:topic能存储的数据量、topic数据保存的时间、topic数据大小./bin/kafka-configs.sh -…...
AtCoder Beginner Contest 391(A~E题题解)
A - Lucky Direction 思路:纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…...
mysql mvcc 锁 关系
多版本并发控制(MVCC)是一种用于数据库并发控制的机制,它可以在保证数据一致性的同时,提高数据库的并发性能。下面结合 MVCC 机制,详细阐述常见的四种事务隔离级别(读未提交、读已提交、可重复读、串行化&a…...
安卓手机基于 Termux 安装 AList 并设置开机自启的详细教程
安装 AList 安装 Termux: 点击下载 更新软件包:打开 Termux,运行以下命令以更新软件包列表并升级已安装的软件包: bash复制 pkg update && pkg upgrade安装 AList:运行以下命令安装 AList: bash复…...
LeetCode:503.下一个更大元素II
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:503.下一个更大元素II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
