1.使用Llama-factory微调Llama3教程
2.高级RAG(三):llamaIndex从小到大的码原检索
3.如何在macOS中使用类似ChatGPT的MLC本地聊天机器人
4.Open-WebUI(原Ollama_WebUI)Windows上源码安装配置记录
5.llama-cpp-python快速上手
6.开源大模型GGUF量化(llama.cpp)与本地部署运行(ollama)教程
使用Llama-factory微调Llama3教程
通过以下链接,新用户注册登录 OpenBayes ,码原即可获得四个小时 RTX 免费使用时长 !码原!码原
注册链接: 注册 - OpenBayes
模型训练的码原第一步是创建容器。在 OpenBayes 中,码原keiti猫psd源码选择一台搭载了显卡的码原2.1-gpu,安装python-3.和cudu-.1,码原并完成容器创建。码原
接下来,码原下载并配置 llama-factory 源码。码原下载后,码原通过命令安装所需的码原模块,注意不要添加代理。码原
启动 llama-factory 的码原 web-ui 页面,访问其API地址,即可查看页面。初次访问可能为英文界面,可切换至中文。选择llama3模型,如llama3-8b-chinese-chat,获取对应的Hugging Face模型id,自动或手动下载模型。
指定训练数据集,调整相关参数。预览训练命令以确认无误后,点击开始进行训练。训练过程中,左侧实时显示进度和损失情况。
在配置环境后,使用 llama-factory 进行模型微调的过程相对简便。借助 OpenBayes 提供的平台,用户可以轻松开始训练,体验友好。
高级RAG(三):llamaIndex从小到大的检索
LlamaIndex是一个面向大型语言模型(LLMs)的数据处理框架,旨在简化数据整合过程,以构建应用如文档问答和数据增强聊天机器人。它提供了连接私有或领域特定数据源的能力,让开发者构建基于数据的LLMs应用。LlamaIndex是一个开源项目,其源码和文档可在GitHub上获取。
为了开始使用LlamaIndex,需安装python包并进行初始化,导入openai,gemini等大型模型API密钥。
在LlamaIndex中,加载数据通常通过使用TrafilaturaWebReader从网页中抓取信息。查看文档数量后,将数据切割成更易于管理的“节点”,这个过程类似于Langchain的文档切割,但LlamaIndex有自己的规则,如使用空格和句号作为分隔符。切割后的节点包含其ID以及与原始文档和相邻节点的关系信息,从而创建了丰富的上下文索引。
在LlamaIndex中,使用预训练的中文Embedding模型bge-small-zh-v1来构建向量数据库。同时,writefile 源码可以选择不同的大型模型,如OpenAI的ChatGPT或谷歌的Gemini,以实现检索和生成文本。通过创建Index、retriever和query engine组件,可以将数据和模型连接起来,实现检索功能。
“从小到大的检索”是LlamaIndex提供的一种独特方法,它允许在切割文档时设置不同的颗粒度,比如、、字节,以生成不同大小的文档块。这些块被组织成一个递归检索器,以更快地定位与用户问题相关的信息。通过这种方式,LlamaIndex能够提供更细致和精确的检索结果。
LlamaIndex不仅提供了一种高效的数据处理和检索方法,还允许在各种模型和数据粒度之间灵活切换,以适应不同的应用需求。通过整合其文档切割、检索和模型集成功能,LlamaIndex为构建基于LLMs的复杂应用提供了强大的工具。
如何在macOS中使用类似ChatGPT的MLC本地聊天机器人
ChatGPT 几乎在任何主题上都拥有看似无限的知识,并且可以实时回答问题,否则需要数小时或数天的研究。公司和员工都意识到人工智能可以通过减少研究时间来加快工作速度。
缺点然而,鉴于所有这些,一些人工智能应用程序有一个缺点。人工智能的主要缺点是结果仍然必须经过验证。
虽然通常大部分是正确的,但人工智能可以提供错误或欺骗性的数据,从而导致错误的结论或结果。
软件开发人员和软件公司已经采用了“copilots” 专门的聊天机器人,可以通过让AI自动编写功能或方法的大纲来帮助开发人员编写代码 然后可以由开发人员验证。
虽然可以节省大量时间,但副驾驶也可以编写不正确的代码。微软、亚马逊、GitHub和英伟达都为开发人员发布了副驾驶。
聊天机器人入门要了解 至少在高层次上聊天机器人的工作原理,您必须首先了解AI基础知识,特别是机器学习(ML)和大型语言模型(LLM)。
机器学习是计算机科学的一个分支,致力于研究和开发尝试教计算机学习的方法。
LLM本质上是一个自然语言处理(NLP)程序,它使用大量的数据和神经网络(NN)来生成文本。LLM通过在大数据模型上训练AI代码来工作,然后随着时间的推移从中“学习” 基本上根据输入数据的准确性成为特定领域的领域专家。
输入数据越多(也越准确),使用该模型的聊天机器人就越精确和正确。LLM在接受数据模型训练时也依赖于深度学习。
当您向聊天机器人提问时,它会根据其与您的问题相关的所有主题的学习和存储知识,向其LLM查询最合适的降临 源码答案。
从本质上讲,聊天机器人已经预先计算了一个主题的知识,并且给定足够准确的LLM和足够的学习时间,可以提供比大多数人更快的正确答案。
使用聊天机器人就像立即拥有一个自动化的博士团队。
年 月,Meta AI 发布了自己的?LLM,名为 LLaMA。一个月后,谷歌推出了自己的人工智能聊天机器人Bard,它基于自己的LLM,LaMDA。此后,其他聊天机器人也随之而来。
生成式人工智能最近,一些LLM已经学会了如何生成非基于文本的数据,例如图形,音乐,甚至整本书。公司对生成式人工智能感兴趣,以创建诸如企业图形,徽标,标题甚至取代演员的数字**场景之类的东西。
例如,本文的缩略图是由 AI 生成的。
作为生成式人工智能的副作用,工人们开始担心因人工智能软件驱动的自动化而失去工作。
聊天机器人助手世界上第一个商业用户可用的聊天机器人(BeBot)由Bespoke日本于年为东京车站城发布。
作为iOS和Android应用程序发布,BeBot知道如何引导您到迷宫般的车站周围的任何地方,帮助您存放和取回行李,将您送到信息台,或查找火车时间,地面交通或车站内的食物和商店。
它甚至可以告诉您前往哪个火车站台,以便按行程持续时间乘坐最快的火车前往城市中的任何目的地 所有这些都在几秒钟内完成。
MLC 聊天应用机器学习编译(MLC)项目是Apache基金会深度学习研究员冯思源和金弘毅以及西雅图和中国上海的其他人的心血结晶。
MLC背后的想法是将预编译的LLM和聊天机器人部署到消费者设备和Web浏览器。MLC 利用消费者图形处理单元 (GPU) 的强大功能来加速 AI 结果和搜索,使 AI 触手可及,大多数现代消费者计算设备都可以使用。
另一个MLC项目Web?LLM? 为Web浏览器带来了相同的功能,并且又基于另一个项目? WebGPU。Web LLM 仅支持具有特定 GPU 的计算机,因为它依赖于支持这些 GPU 的代码框架。
大多数AI助手依赖于客户端 服务器模型,服务器完成大部分AI繁重的工作,但MLC将LLM烘焙到直接在用户设备上运行的本地代码中,从而消除了对LLM服务器的需求。
设置机器学习若要在设备上运行 MLC,它必须满足项目和 GitHub 页面上列出的最低要求。
要在iPhone上运行它,您需要具有至少GB可用RAM的iPhone Pro Max,iPhone Pro或iPhone 6 Pro。您还需要安装Apple的TestFlight应用程序才能安装该应用程序,但安装仅限于前9,sstap 源码个用户。
我们尝试在具有 GB 存储空间的基本 iPad 上运行 MLC,但它无法初始化。您的结果在 iPad Pro 上可能会有所不同。
您还可以从源代码构建 MLC,并按照 MLC-LLM GitHub 页面上的说明直接在手机上运行它。您需要在 Mac 上安装 git 源代码控制系统才能检索源代码。
为此,请在 Mac 上的 Finder 中创建一个新文件夹,使用 UNIX 命令在“终端”中导航到该文件夹,然后在“终端”中触发 MLC-LLM GitHub 页面上列出的命令:
cd
git clone
/mlc-ai/mlc-llm.git
,然后按回车键。git 会将所有 MLC 源下载到您创建的文件夹中。
MLC在iPhone上运行。您可以选择或下载要使用的模型重量。安装 Mac 先决条件对于 Mac 和 Linux 计算机,MLC 从终端中的命令行界面运行。需要先安装一些必备组件才能使用它:
Conda 或 Miniconda?Package Manager自制Vulkan 图形库(仅限 Linux 或 Windows)git 大文件支持 (LFS)对于 NVIDIA GPU 用户,MLC 说明明确指出您必须手动安装?Vulkan?驱动程序作为默认驱动程序。另一个用于NVIDIA GPU的图形库 ?CUDA? 将无法工作。
对于Mac用户,您可以使用Homebrew包管理器安装Miniconda,我们之前已经介绍过。请注意,Miniconda与另一个自制Conda公式miniforge冲突。
因此,如果您已经通过Homebrew安装了miniforge,则需要先将其卸载。
按照 MLC/LLM 页面上的说明,其余的安装步骤大致如下:
创建新的 Conda 环境安装 git 和 git LFS从 Conda 安装命令行聊天应用创建新的本地文件夹,下载 LLM 模型权重并设置LOCAL_ID变量从 GitHub 下载 MLC 库所有这些都在说明页面上详细提到,因此我们不会在这里讨论设置的各个方面。最初可能看起来令人生畏,但如果您具有基本的macOS终端技能,那么实际上只需几个简单的步骤。
LOCAL_ID步骤只是将该变量设置为指向您下载的三个模型权重之一。
模型权重是从HuggingFace社区网站下载的,该网站有点像AI的GitHub。
在终端中安装所有内容后,您可以使用
mlc_chat_cli
命令。
在网络浏览器中使用 MLCMLC还有一个网络版本,Web LLM。
Web LLM变体仅在Apple Silicon Mac上运行。它不会在英特尔 Mac 上运行,如果您尝试,它会在聊天机器人窗口中产生错误。
MLC 网络聊天窗口顶部有一个弹出菜单,您可以从中选择要使用的下载模型重量:
选择其中一个模型权重。您需要 Google Chrome 浏览器才能使用 Web LLM(Chrome 版本 或更高版本)。早期版本将不起作用。
您可以在Mac版本中从Chrome菜单中查看您的Chrome版本号,方法是转到Chrome-关于Google Chrome。如果有可用的更新,请单击“更新”按钮以更新到最新版本。
您可能需要在更新后重新启动 Chrome。
请注意,雨季 源码MLC Web LLM 页面建议您使用以下命令从 Mac 终端启动 Chrome:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome — enable-dawn-features=allow_unsafe_apis,disable_robustness
allow_unsafe_apis和disable_robustness是两个Chrome启动标志,允许它使用实验性功能,这些功能可能不稳定,也可能不稳定。
设置好所有内容后,只需在Web LLM网页聊天窗格底部的“输入您的消息”字段中键入问题,然后单击“发送”按钮。
真正的人工智能和智能助手的时代才刚刚开始。虽然人工智能存在风险,但这项技术有望通过节省大量时间和消除大量工作来改善我们的未来。
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,体验良好。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工具完成创作与发布流程。
开源大模型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对大模型进行量化并实现本地运行。若需进一步了解或在操作中遇到问题,欢迎在留言区进行交流。
基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
基于 LLaMA 系基模型经过中文金融知识指令精调的微调模型,旨在提升金融领域问答效果。通过整合中文金融公开问答数据与爬取的金融问答数据,构建指令数据集,并在此基础上对 LLaMA 系模型进行指令微调。使用 GPT3.5/4.0 API 和中文金融知识图谱、CFLEB 金融数据集等扩充数据集,确保高质量训练。
安装环境时,建议使用 Python 3.9 以上版本,同时通过 lfs 方便本地下载 LLaMa 大模型。下载 LLaMA 模型时,注意选择分类为“中文金融问答微调模型”,并根据模型的不同版本和参数调整训练数据、训练序列长度等参数。
进行单模型推理和多模型对比,通过运行 infer 脚本,使用 ./instruction_data/infer.json 提供的测试用例或自定义数据集进行验证。构建数据集时,集成公开和爬取的中文金融领域问答数据,覆盖保险、理财、股票、基金、贷款、信用卡、社保等业务场景,优化数据质量和丰富性。
在微调 Finetune 阶段,按照 ./instruction_data/fin_data.json 的格式构建自定义数据集,运行 finetune 脚本进行微调。训练细节包括计算资源需求,推荐使用 A-SXM-GB 显卡,训练总轮次为 轮。根据显存大小调整 batch_size,预计 / 显卡(GB 显存)以上显卡可以较好支持。
在提示词模板构建模块中,包含用于 LoRA 微调 LLaMa 模型的提示模板样式,通过 JSON 文件描述模板,确保模板灵活适用于不同任务需求。现有模板包括 alpaca.json、alpaca_legacy 和 alpaca_short 等,提供通用和特定任务的提示词选择。
提示构建模块是 Prompter 类,作为模板管理器,用于构建和调整提示词以适应不同模型微调需求。项目源代码和更多优质内容可访问指定链接或关注公号“汀丶人工智能”获取资源和文章。
中文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权重合并回基础模型,以及进行模型推理测试,是实现最终模型应用的步骤。尽管词表扩充+预训练+指令精调能够显著提升模型性能,但对于资源有限的开发者,选择直接使用支持中文的模型,或者进行部分词表扩充和微调,可能是更实用的方案。
[fastllm]cuda-kernels源码解析
在fastllm中,CUDA-kernels的使用是关键优化点之一,主要涉及以下几个高频率使用的kernel:gemv_int4、gemv_int8、gemm_int8、RMSNorm、softmax、RotatePosition2D、swiglu等。其中,gemm是计算密集型的,而其余大部分都是内存受限型。利用量化bit进行计算,比原始的torch转为浮点数更快,同时,没有进行融合操作,为后续优化留下了空间。
gemv_int4 kernel:主要用于实现float*int4的GEMV乘积,其中偏置值设定为最小值。在计算中,矩阵被划分为不同的tile,不同tile之间并行操作。在遍历m/2的过程中,找到对应int4值的位置,通过保存的mins找到最小值minv。同一组的两个int4值共享同一个minv,计算结果的最终和被保存在sdata[0]上,用于更新对应m列位置的output值。结果向量为n*1。
gemv_int8 kernel:在功能上与gemv_int4类似,但偏置值由保存的minv变为了zeros。
gemm_int8 kernel:此kernel负责计算n*m矩阵与m*k矩阵的乘积。计算过程涉及多个tile并行,block内部保存的是部分和。考虑到线程数量限制,通常会有优化空间。最终结果通过为单位进行更新。
layerNorm实现:此kernel实现layernorm计算,通过计算均值和方差来调整数据分布。计算中,sdata存储所有和,sdata2存储平方和。每个block内计算部分和后,规约得到全局的均值和方差,从而更新output。
RMS kernels解析:RMSNorm kernel实现RMS归一化,通过计算输入的平方和和均值,进而更新output。
softmax kernels解析:计算输入的softmax值,涉及最大值查找、指数计算和规约求和等步骤,以防止浮点数下溢。
RotatePosition2D Kernels解析:用于旋转位置编码,线程展开成三层循环。LlamaRotatePosition2D、NearlyRotatePosition和RotatePosition2D在旋转方式上有所区别,体现在不同的位置上进行计算。
AttentionMask Kernels解析:对输入按照mask掩码置值,普通mask直接置为maskv,而Alibimask则是置为相对位置的值之和。具体含义可能涉及空间上的概念,但文中未详细说明。
swiglu kernels解析:作为激活函数,这些kernel在原地操作中执行常见函数,线程足够使用,直接按照公式计算即可。
综上所述,fastllm中CUDA-kernels的使用旨在通过优化计算过程和内存操作,提升模型的计算效率,实现更高效的推理和训练。