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的模型结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14681.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜维尔科技:提供人形机器人传感器的应用案例分析

视觉传感器 • 家庭服务场景:在家庭清洁机器人中,视觉传感器可以识别家具、障碍物的位置和形状,规划清洁路径,避开桌椅、宠物玩具等。如小米扫地机器人,通过视觉传感器与算法结合,能构建房间地图&#xff…

windows蓝牙驱动开发-蓝牙 LE 邻近感应配置文件

邻近感应检测是蓝牙低功耗 (LE) 的常见用途。 本部分提供了创建可用于开发 UWP 设备应用的邻近感应配置文件的设备实现的指南。 在开发此应用之前,应熟悉蓝牙 LE 函数和蓝牙 LE 邻近感应配置文件规范。 示例服务声明 蓝牙低功耗引入了一个新的物理层,…

逻辑回归:Sigmoid函数在分类问题中的应用

欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 什么是Sigmoid函数? Sigmoid函数(Logistic函数)是机器学习中最经典的激活函数之一,是一个在生物学中常见的S型函数,也称为S型生长曲线。…

如何在Windows中配置MySQL?

MySQL是一个广泛使用的开源关系型数据库管理系统,它支持多种操作系统平台,其中包括Windows。无论是开发者进行本地开发,还是管理员为应用程序配置数据库,MySQL都是一个非常流行的选择。本篇文章将详细介绍如何在Windows操作系统中…

MySQL的操作

一.数据库的操作 1.创建数据库 create database (if not exists) 数据库名称 (character set/charset 字符集名称); SQL中有特定含义的单词(create database)也就是关键字 在创建数据库名 表名 列名的时候都可以和关键字重复 。 if not exists&#xff1…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

响应式编程_05 Project Reactor 框架

文章目录 概述响应式流的主流实现框架RxJavaReactor Project Reactor 框架Reactor 异步数据序列Flux 和 Mono 组件FluxMono 操作符背压处理 小结 概述 响应式编程_02基本概念:背压机制 Backpressure介绍了响应式流规范以及 Spring 框架中的响应式编程技术&#xff…

免费windows pdf编辑工具Epdf

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

计算机组成原理(3)

计算机组成原理(3) 存储器层次结构存储器概述存储器分类存储器性能指标 半导体随机存储SRAM和DRAM 存储器层次结构 主存-辅存:实现了虚拟存储系统,解决了主存容量不足的问题; Cache-主存:解决了主存于CPU速…

html 列动态布局

样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制? 阻抗控制旨在通过调节机器人与环境的相互作用,控制其动态行为。阻抗可以理解为一个力和位移之间的关系,涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制:根据感测的外力调节机械手的动作。位置…

Redis03 - 高可用

Redis高可用 文章目录 Redis高可用一:主从复制 & 读写分离1:主从复制的作用2:主从复制原理2.1:全量复制2.2:增量复制(环形缓冲区) 3:主从复制实际演示3.1:基本流程准…

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

Ollama + AnythingLLM + Deepseek r1 实现本地知识库

1、Ollama:‌是一个开源的大型语言模型 (LLM)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛‌。 2、AnythingLLM:是由Mintplex Labs Inc. 开发的一款全栈应用程序,旨在构建一个高效、可定制、…

(Arxiv-2023)HiPA: 通过高频增强自适应实现一步文本到图像扩散模型

HiPA: 通过高频增强自适应实现一步文本到图像扩散模型 paper是NUS发布在Arxiv 2023的工作 paper title:HiPA: Enabling One-Step Text-to-Image Diffusion Models via High-Frequency-Promoting Adaptation Code:等待开源 Abstract 扩散模型已彻底改变了文本到图像…

Java版本与JDK版本

两者关联 Java版本指的Java语言和平台的版本,例如Java8、Java11、Java17等,每个版本会引入新特性、改进和修复。 JDK(Java Development Kit)版本则是开发工具包,包含编译器、调试器等工具,通常与Java版本对应,例如JDK…

【C语言标准库函数】三角函数

目录 一、头文件 二、函数简介 2.1. 正弦函数:sin(double angle) 2.2. 余弦函数:cos(double angle) 2.3. 正切函数:tan(double angle) 2.4. 反正弦函数:asin(double value) 2.5. 反余弦函数:acos(double value)…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

MySQL第五次作业

根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…