1.Open-WebUI(原Ollama_WebUI)Windows上源码安装配置记录
2.基于中文金融知识的码分 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
3.探讨Transformer 中的Beam search 实现
4.LLAMA2 介绍-第一部分
5.在Jetson AGX Orin上体验LLaMA2
6.高级RAG(三):llamaIndex从小到大的检索
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快速启动,码分dtmf解码 源码但务必注意在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 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
基于 LLaMA 系基模型经过中文金融知识指令精调的微调模型,旨在提升金融领域问答效果。通过整合中文金融公开问答数据与爬取的金融问答数据,构建指令数据集,并在此基础上对 LLaMA 系模型进行指令微调。使用 GPT3.5/4.0 API 和中文金融知识图谱、CFLEB 金融数据集等扩充数据集,确保高质量训练。
安装环境时,建议使用 Python 3.9 以上版本,同时通过 lfs 方便本地下载 LLaMa 大模型。下载 LLaMA 模型时,注意选择分类为“中文金融问答微调模型”,并根据模型的不同版本和参数调整训练数据、训练序列长度等参数。
进行单模型推理和多模型对比,php小项目 源码通过运行 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 类,作为模板管理器,用于构建和调整提示词以适应不同模型微调需求。项目源代码和更多优质内容可访问指定链接或关注公号“汀丶人工智能”获取资源和文章。
探讨Transformer 中的Beam search 实现
在探索Transformer技术的过程中,我偶然接触到Llama2,并借此机会深入了解了其内部的Beam search算法是如何在generate方法中运用的。虽然网上的理论解释很多,但实际的实现方法却相对较少,所以我决定记录下这个学习过程。
Llama模型的构建是基于Transformer的PretrainedModel,而PretrainedModel又扩展自GenerationMixin,这个 mixin类为模型的generate功能提供了基础。GenerationMixin中的generate函数设计巧妙,通过判断generation_mode参数,php评价系统源码能够进入与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应用中的挑战,为社会带来更多的净效益。
在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列表,提高对话完成的效率和质量。
高级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的复杂应用提供了强大的工具。
中文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的使用旨在通过优化计算过程和内存操作,提升模型的计算效率,实现更高效的推理和训练。