1.在Jetson AGX Orin上体验LLaMA2
2.llama-cpp-python快速上手
3.中文LLaMA&Alpaca大语言模型词表扩充+预训练+指令精调
4.vllm vs TGI 部署 llama v2 7B 踩坑笔记
5.探讨Transformer 中的码泄Beam search 实现
6.LLAMA2 介绍-第一部分
在Jetson AGX Orin上体验LLaMA2
探索在Jetson AGX Orin上使用LLaMA2的体验
首先,访问LLaMA2模型官网并申请新的码泄下载链接,务必谨慎填写信息。码泄
收到邮件后,码泄将其暂时留存,码泄以备后续使用。码泄盖地虎通达信源码
随后,码泄打开终端并创建conda环境(命名'llama'),码泄安装所需python版本(Python 3.8)。码泄
激活环境并切换至/home1/zhanghui目录,码泄克隆LLaMA2仓库,码泄进入目录执行下载脚本。码泄
输入邮箱提供的码泄URL和模型类型(先选择7B)进行下载,文件将保存至当前目录和./llama-2-7b文件夹内。码泄
下载完成后,码泄使用pip安装LLaMA2代码。
在example_text_completion.py中,通过torchrun命令运行文本补全示例,指定模型目录、分词器路径、最大序列长度和最大批量大小。
查看结果,文本补全任务已经完成,生成了自然的文本延续。
尝试更换torch版本,如torch 2.1,重复上述步骤,发现结果相似。
若想在Jetson AGX Orin上编译torch,需从源码构建。
创建目录newpytorch,激活环境后,调整系统性能设置,克隆pytorch仓库,并配置环境变量。
使用pip安装所需依赖,编译pytorch,并将编译好的whl文件安装至系统。
在llama目录下运行文本补全示例,检查结果。
发现结果不完整,调整参数后,文本补全效果更佳。
尝试使用不同的对话示例,通过调整dialog列表大小来优化模型性能。
为便于Jetson AGX Orin的使用,提供预编译的torch 2.0.1安装包,链接: pan.baidu.com/s/dutA5... 提取码: 9snu。
对于LLaMA2-chat对话示例,修改对话列表以适应模型处理能力。
通过调整max_seq_len和max_batch_size,以及优化dialog列表,提高对话完成的效率和质量。
llama-cpp-python快速上手
年月4号更新,根据评论区大佬提示,针对llama-cpp-python不支持后缀为.bin的模型情况,建议使用llama.cpp重新量化模型,超级火焰源码生成.gguf格式的模型以解决兼容性问题。
年月号更新,近期用户反馈llama-cpp-python最新版不支持ggmlv3模型,为解决此问题,需手动使用convert-llama-ggmlv3-to-gguf.py脚本将模型转为.gguf格式,该脚本位于github.com/ggerganov/ll...,请自行下载并执行。
gpu部署相关问题请参考zhuanlan.zhihu.com/p/...的详细指南。
项目源代码可于GitHub中查找,建议直接阅读官方文档以获取准确安装指南。
安装llama-cpp-python后,文档提及可能存在的依赖问题,可参考整理的缺失依赖列表,按照文档指引依次执行安装步骤。
高级API提供Llama类,实现简单托管接口,具体操作包括指定模型路径等,返回值参照文档说明。
低级API通过ctypes绑定llama.cpp库,完整API定义在llama_cpp/llama_cpp.py中,直接映射llama.h中的C API。
搭建与OpenAI接口兼容的服务器,llama-cpp-python提供了一个web服务器作为替代方案。成功运行命令后,可访问文档页面。
文档页面为英文,针对需要对话接口的用户,本文提供Python示例。欲自建接口,需遵循法律法规,在个人服务器上启动相关服务,反向代理,则对话地址为/v1/chat/completions,实现对openai库的自主控制。
本文使用Zhihu On VSCode工具完成创作与发布流程。
中文LLaMA&Alpaca大语言模型词表扩充+预训练+指令精调
在探索大模型在中文场景中的应用时,我们发现LLaMA模型虽然在多语言模型中性能卓越,但原生支持中文的能力相对有限。其词表大小仅为K,远低于多语言模型如XLM-R、Bloom所使用的K词表大小,这直接导致了中文token数量过少,影响了模型在中文任务上的表现。因此,对LLaMA进行词表扩充成为了解决这一问题的关键步骤。
为了应对这一挑战,国内开源项目Chinese-LLaMA-Alpaca提供了详细的指南,从词表扩充、模型预训练到指令精调,帮助开发者构建更加适应中文环境的LLaMA模型。整个流程涉及到环境搭建、代码、模型、数据集的准备,以及最终的模型输出和应用。
环境搭建方面,看趣源码我们使用Docker镜像进行高效、复现性好的配置。这一步骤包括下载Pytorch镜像、创建并进入容器、安装依赖库,以及从源码安装Peft库,以满足后续操作需求。
代码、模型、数据集的准备是整个流程的核心。通过下载Chinese-LLaMA-Alpaca的官方代码,我们将原始LLaMA的权重文件转换为适应Transformers库的格式,或者直接使用已转换好的模型,如yahma/llama-7b-hf。数据集准备则涉及到从开源书籍中下载并清洗数据,以确保用于训练的资料质量。
词表扩充是Chinese-LLaMA-Alpaca项目中的重要部分。通过在通用中文语料库上训练基于sentencepiece的K中文词表,并将其与原版LLaMA的K词表进行合并,最终得到一个包含个token的中文LLaMA词表。值得注意的是,在进行指令精调阶段时,Alpaca模型会额外引入一个pad token,使得中文Alpaca的词表大小为。因此,在将LoRA权重合并回基础模型时,需要特别注意词表大小的一致性问题。
模型训练细节方面,整个过程分为预训练、预训练和指令精调三个阶段。预训练阶段包括两个子阶段,通过使用LoRA技术,模型不仅更新了embedding参数,同时也添加了LoRA权重,以提高训练效率。指令精调阶段则与Stanford Alpaca的格式保持一致,采用LoRA进行高效精调,并增加了可训练参数的数量。
最后,将多个LoRA权重合并回基础模型,以及进行模型推理测试,是实现最终模型应用的步骤。尽管词表扩充+预训练+指令精调能够显著提升模型性能,但对于资源有限的开发者,选择直接使用支持中文的模型,或者进行部分词表扩充和微调,可能是更实用的方案。
vllm vs TGI 部署 llama v2 7B 踩坑笔记
本文旨在对比vllm和TGI这两个开源方案在部署LLaMa v2 7B模型时的性能和体验。测试环境为单卡 + i9-K。结果表明,TGI (0.9.3) 在吞吐量上略胜vllm (v0.1.2)一筹。
vllm的部署遇到了不少挑战,包括网络和依赖问题,最终通过定制化的Dockerfile解决了安装难题。为了确保使用最新的fastchat时拥有对应的消息模板,用户需手动调整entrypoints.openai.api_server中的token认证源码引入方式。部署后,通过http://{ host}:{ port}/generate发送POST请求,并在body中提供参数。
TGI同样提供了方便的部署方式,推荐通过Docker或本地源码安装。对于本地测试,Ubuntu环境下的安装步骤包括安装protoc和调整cargo源。部署成功后,用户可通过text-generation-launcher启动服务。TGI的参数配置较为丰富,尤其对于服务部署而言,提供了更多灵活性。
为了评估模型性能,我们分别使用vllm和TGI进行了基准测试。结果显示,vllm的平均输出速度为. tokens/s,吞吐量为4. requests/s,相当于每分钟处理.7个序列。JMeter模拟测试表明,每个用户发送消息后,接收到LLM回复的延迟在ms以内,平均每轮对话的回复速度在- tokens/s。因此,使用单张显卡,可以部署一个支持约人正常使用的7B LLM模型。
除了vllm和TGI,还有其他LLM服务部署仓库可供选择,如lmdeploy等。受限于设备条件,本文仅对单卡部署7B模型进行了测试。在之前的LLaMa量化文章中,提到使用GPTQ量化后推理速度提高了近3倍。但当批量大小较大时,GPTQ的批量推理效率低于fp,因此采用GPTQ的吞吐量提升可能有限。目前,TGI对exllama的支持尚不完善,未来将关注其性能改进。
探讨Transformer 中的Beam search 实现
在探索Transformer技术的过程中,我偶然接触到Llama2,并借此机会深入了解了其内部的Beam search算法是如何在generate方法中运用的。虽然网上的理论解释很多,但实际的实现方法却相对较少,所以我决定记录下这个学习过程。
Llama模型的构建是基于Transformer的PretrainedModel,而PretrainedModel又扩展自GenerationMixin,这个 mixin类为模型的generate功能提供了基础。GenerationMixin中的generate函数设计巧妙,通过判断generation_mode参数,能够进入与Beam Search相关的代码路径。
深入研究,我们主要关注的是self.beam_search方法,其代码虽然冗长,但关键部分值得我们关注。这个方法的核心在于通过迭代和概率计算,逐步生成最有可能的聚合解析源码输出序列,以实现高效的搜索策略。
要想详细了解这个过程的每一个步骤,原始的源码提供了详尽的说明。通过实践和阅读源码,我们可以逐步理解Transformer的Beam search是如何在实际应用中发挥作用的。
LLAMA2 介绍-第一部分
孟奇奎
来源:Meta
LLAMA2是Meta公司最新开源的大规模语言模型(LLMs),包含7B、B和B三个版本。其训练数据集规模达到2万亿token,具备卓越的性能与独特优势:
1. 在各种基准测试上显著超越其他开源模型,并在很多测试中达到或优于GPT4的性能
2. 允许商业应用,打破了开源模型的限制
该模型在多个领域展现出超越同级别开源模型的性能,特别是在有用性和安全性方面,经过人工评估,Llama 2-Chat甚至与某些闭源模型相比,表现相当或更优。Meta公司采取了一系列措施提升模型安全性,包括使用安全数据标注、调整模型参数以及进行红队测试,以确保模型在实际应用中的可靠性和安全性。此外,公司还提供了详细的微调方法论和改进安全性策略的描述,旨在推动社区发展更负责任、更安全的LLMs。
LLAMA2系列包括预训练和微调的模型,从亿参数的Llama 2到亿参数的Llama 2-Chat。在有用性和安全性基准测试中,Llama 2-Chat通常表现优于现有开源模型,甚至与某些闭源模型相比,表现出相当或更优的性能。这些改进和优化旨在确保模型不仅在性能上卓越,而且在实际应用中也具备高度的可靠性和安全性。
LLAMA2模型的发布面向公众,为研究和商业应用提供了新的工具。这些模型的参数量从7B、B到B不等,覆盖了广泛的使用场景。此外,Llama 2-Chat作为一种针对对话场景优化的模型,为用户提供了一种更为自然、流畅的交互体验。在部署应用前,开发人员需要进行安全测试和针对特定应用的调优,以确保模型的稳定性和安全性。
本文详细介绍了LLAMA2系列的开发过程、预训练方法、微调策略、模型安全性改进、关键观察和洞察、相关工作以及结论。模型的训练流程从大规模预训练开始,通过应用监督微调创建初始版本,随后使用人类反馈的强化学习(RLHF)进行迭代优化。预训练数据采用优化的自回归transformer,数据清洗、更新数据组合、增加训练tokens数量、扩展上下文长度以及采用分组查询注意力机制(GQA)以提高推理可扩展性,都是为了提升模型性能。
在训练过程中,使用AdamW优化器进行参数调整,采用了余弦学习率调度,优化了硬件配置(使用NVIDIA As GPU集群)以降低碳排放,并通过Meta的可持续性计划直接抵消了碳排放。分词器采用字节对编码(BPE)算法,确保模型能够准确理解文本信息。
评估结果显示,LLAMA2模型在多种学术基准测试中表现出色,与开源和闭源模型相比,Llama 2 B模型在MMLU和BBH基准测试上与GPT-3.5和GPT-4接近,而在编码基准测试上存在显著差距。在几乎所有基准测试中,Llama 2 B的表现均优于PaLM模型,并且在Llama 2 B与GPT-4和PaLM-2-L之间的性能差距较大。此外,模型还在安全性和实用性方面进行了优化,以适应商业和研究环境。
随着LLAMA2模型的开源发布,Meta旨在鼓励社区参与模型的进一步研究和应用,推动AI技术的负责任发展。通过开放模型源代码和提供详细的开发文档,Meta希望能够促进学术研究、技术创新以及行业合作,共同探索和解决AI应用中的挑战,为社会带来更多的净效益。
高级RAG(三):llamaIndex从小到大的检索
LlamaIndex是一个面向大型语言模型(LLMs)的数据处理框架,旨在简化数据整合过程,以构建应用如文档问答和数据增强聊天机器人。它提供了连接私有或领域特定数据源的能力,让开发者构建基于数据的LLMs应用。LlamaIndex是一个开源项目,其源码和文档可在GitHub上获取。
为了开始使用LlamaIndex,需安装python包并进行初始化,导入openai,gemini等大型模型API密钥。
在LlamaIndex中,加载数据通常通过使用TrafilaturaWebReader从网页中抓取信息。查看文档数量后,将数据切割成更易于管理的“节点”,这个过程类似于Langchain的文档切割,但LlamaIndex有自己的规则,如使用空格和句号作为分隔符。切割后的节点包含其ID以及与原始文档和相邻节点的关系信息,从而创建了丰富的上下文索引。
在LlamaIndex中,使用预训练的中文Embedding模型bge-small-zh-v1来构建向量数据库。同时,可以选择不同的大型模型,如OpenAI的ChatGPT或谷歌的Gemini,以实现检索和生成文本。通过创建Index、retriever和query engine组件,可以将数据和模型连接起来,实现检索功能。
“从小到大的检索”是LlamaIndex提供的一种独特方法,它允许在切割文档时设置不同的颗粒度,比如、、字节,以生成不同大小的文档块。这些块被组织成一个递归检索器,以更快地定位与用户问题相关的信息。通过这种方式,LlamaIndex能够提供更细致和精确的检索结果。
LlamaIndex不仅提供了一种高效的数据处理和检索方法,还允许在各种模型和数据粒度之间灵活切换,以适应不同的应用需求。通过整合其文档切割、检索和模型集成功能,LlamaIndex为构建基于LLMs的复杂应用提供了强大的工具。
开源大模型GGUF量化(llama.cpp)与本地部署运行(ollama)教程
llama.cpp与ollama是开源项目,旨在解决大型模型在本地部署时遇到的问题。通过llama.cpp,用户可以对模型进行量化,以解决模型在特定电脑配置下无法运行的问题。同时,ollama则提供了一个简单的方法,让量化后的模型在本地更方便地运行。
对于许多用户来说,下载开源大模型后,往往面临不会运行或硬件配置不足无法运行的困扰。本文通过介绍llama.cpp和ollama的使用,提供了一个从量化到本地运行的解决方案。
下面,我们以Llama2开源大模型为例,详细说明如何在本地使用llama.cpp进行量化GGUF模型,并通过ollama进行运行。
在开始前,如果对量化和GGUF等专业术语感到困惑,建议使用文心一言或chatGPT等AI工具进行查询以获取更多信息。
使用ollama进行运行非常简单,只需访问其官网下载安装应用即可。支持众多大模型,操作指令直接使用`ollama run`即可自动下载和运行大模型。
运行指令示例:对于llama2大模型,原本.5G的7b模型在ollama中压缩至3.8G,量化等级为Q4_0。若需导入并运行已量化的GGUF模型,只需创建一个文件并添加FROM指令,指定模型本地文件路径。
在使用ollama进行模型操作时,需注意创建模型、运行模型等步骤。若有疑问,可留言交流。
对于自行下载的模型,要实现量化成GGUF格式,就需要借助于llama.cpp项目。该项目旨在实现LLM推理,支持多种量化级别,如1.5位、2位、3位、4位、5位、6位和8位整数量化,以提高推理速度并减少内存使用。
要使用llama.cpp,首先需克隆源码并创建build目录,然后通过Cmake进行编译。推荐使用Visual Studio 进行编译。编译成功后,可在bin/release目录找到编译好的程序。
接下来,通过llama.cpp项目中的convert.py脚本将模型转换为GGUF格式。对于llama2-b模型,转换后的模型大小从.2G缩减至6.G。
量化模型后,运行时使用llama.cpp编译的main.exe或直接使用ollama进行操作。通过创建文本文件并指定模型,使用ollama run指令即可轻松运行量化后的模型。
本文通过详细示例展示了如何利用llama.cpp和ollama对大模型进行量化并实现本地运行。若需进一步了解或在操作中遇到问题,欢迎在留言区进行交流。
在AMD GPU上实现高性能LLM推理
在AMD GPU上实现高性能LLM推理,采用ROCm编译LLM(大语言模型)并在其上部署,可以达到显著的性能。具体而言,在Llama2-7B/B上,AMD Radeon™ RX XTX的推理性能可达到NVIDIA® GeForce RTX™ 速度的%,NVIDIA® GeForce RTX™ Ti速度的%。Vulkan支持同样使得LLM部署可以推广到其他AMD设备,如搭载了AMD APU的SteamDeck。
自从开源LLM的快速发展,性能优秀的推理解决方案大多基于CUDA,并针对NVIDIA GPU进行了优化。然而,随着计算需求的日益增长,扩展到更广泛的硬件加速器类别变得尤为重要。AMD GPU被视为潜在的选项之一。
硬件指标和软件栈对比显示,AMD的RX XTX与NVIDIA的RTX Ti在规格上相当。过去AMD在硬件性能上落后于NVIDIA的主要原因并不是硬件本身,而是软件支持和优化。然而,目前的生态系统中,这一差距正在逐步缩小。本文将深入探讨在AMD GPU上实现大模型推理的解决方案与NVIDIA GPU+CUDA的高效解决方案相比性能如何。
机器学习编译(MLC)是一种新兴技术,旨在编译和自动优化机器学习模型。MLC解决方案利用MLC-LLM,它建立在Apache TVM Unity之上,后者是一个基于Python的高效开发和通用部署的机器学习编译软件栈。MLC-LLM支持CUDA、Metal、ROCm、Vulkan和OpenCL等后端,涵盖了从服务器级别GPU到移动设备的广泛范围。通过MLC-LLM,用户可以使用基于Python的工作流程获取开源的大语言模型,并在包括转换计算图、优化GPU算子的张量布局和调度以及在感兴趣的平台上本地部署时进行编译。
针对AMD GPU和APU的MLC,有几种可能的技术路线,包括ROCm、OpenCL、Vulkan和WebGPU。ROCm技术栈与CUDA有许多相似之处,而Vulkan是最新图形渲染标准,为各种GPU设备提供了广泛支持。WebGPU是最新Web标准,允许在Web浏览器上运行计算。然而,很少有解决方案支持除了CUDA之外的方法,主要是因为复制新硬件或GPU编程模型的技术栈的工程成本过高。MLC-LLM支持自动代码生成,无需为每个GPU算子重新定制,从而为以上所有方法提供支持。性能优化最终取决于GPU运行时的质量以及在每个平台上的可用性。
在AMD GPU上实现高性能LLM推理的解决方案提供了与NVIDIA GPU相当的性能。ROCm5.6下,AMD XTX可以达到NVIDIA 速度的%,考虑到CUDA性能,MLC-LLM是CUDA上大语言模型推理的最优解决方案,但仍有改进空间,如通过更好的attention算子优化。在查看性能测试结果时,建议放置%的误差。
为了复现性能数据,用户可以利用预构建的安装包和使用说明,确保Linux系统上安装了ROCm 5.6或更高版本的AMD GPU。通过遵循说明安装启用了ROCm的预构建MLC pacakge,运行Python脚本以复现性能数据。此外,MLC-LLM还提供了一个命令行界面CLI,允许用户与模型进行交互式聊天。对于ROCm,需要从源代码构建CLI。
在SteamDeck上运行Vulkan时,使用统一内存最多可达GB,足以运行4位量化的Llama-7B。这些结果为支持更多不同类型的消费者提供了启示。
讨论和未来的方向指出,硬件可用性是生成式AI时代的关键问题。ML编译通过在硬件后端之间提供高性能的通用部署,提高硬件的可用性。基于AMD GPU的解决方案在适当的价格和可用性条件下具有潜力。研究目前重点关注消费级GPU,优化通常可以推广到云GPU。我们有信心该解决方案在云和消费级AMD和NVIDIA GPU之间具有普适性,并将在更多GPU访问权限后更新研究。我们鼓励社区在MLC通用部署流程的基础上构建解决方案。
本文是通过MLC支持高效通用机器学习部署研究的一个阶段性努力,我们正积极地在几个方向上努力推广研究。我们最终的结论是,机器学习系统工程是一个持续的问题。关键问题不仅是构建正确的解决方案,还包括不断更新并解决硬件可用性问题。基于Python的ML编译开发流程使得我们可以在几小时内获得ROCm优化的支持,这在我们探索更多关于通用部署的想法时变得尤为重要。
相关资源包括GitHub上的项目发布、详细指南、MLC LLM的源代码、Discord频道以及运行在浏览器里的LLM解决方案Web-LLM。我们特别感谢CMU、UW、SJTU、OctoML团队成员以及开源社区的支持,特别感谢Apache TVM社区、TVM Unity开发人员、LLaMA、Alpaca、Vicuna团队和huggingface、pytorch等开源社区的帮助。
Open-WebUI(原Ollama_WebUI)Windows上源码安装配置记录
在探索多种LLM加速软件中,Ollama凭借其出色的速度和简洁的操作脱颖而出。发现Open-WebUI(原Ollama_WebUI)与ollama服务的配合更佳,因此决定尝试安装。Open-WebUI的GitHub地址为GitHub - open-webui/open-webui: User-friendly WebUI for LLMs (Formerly Ollama WebUI),其主要特点在于通过Docker快速启动,但务必注意在Docker命令中包含"-v open-webui:/app/backend/data",以防数据丢失。 对于需要利用CUDA加速的用户,官方推荐使用带或标签的ollama图像,并确保在Linux/WSL系统上安装Nvidia CUDA容器工具包。如果Ollama在本地,使用以下命令;如果在远程服务器,将OLLAMA_BASE_URL替换为服务器URL。 我的安装策略是选择源码方式,尽管文档推荐Docker。在安装过程中,我加入了国内的pip源以优化下载速度。安装完成后,需要修改.env文件中的ollama地址和backend/config.py中的相应设置。 在Linux或Windows环境下启动Open-WebUI后,可以轻松设置语言,它与ollama的集成十分顺畅。总的来说,使用Open-WebUI为LLM提供了便捷的界面,特别是配合ollama,体验良好。