大语言模型本地部署与微调
Llama3
Ollama部署Llama3
Ollama的地址:https://github.com/ollama/ollama
Ollama是一个开源框架,旨在帮助用户在其本地计算机上轻松管理和部署大型语言模型(LLM)。它不仅仅支持Llama3,还支持阿里开源的千问2.5
部署Ollama
conda create -n ollama python=3.10 conda activate ollama export OLLAMA_MODELS=/mnt/workspace/models curl -fsSL https://ollama.com/install.sh | sh
安装成功后执行
ollama serve
另外开启一个终端运行
ollama run llama3.2
Web方式访问
- 单次会话
这里我们可以使用Postman来访问,访问地址
127.0.0.1:11434/api/generate,Post方式,json参数
{ "model":"llama3.2", "prompt":"为什么天空是蓝色的?", "stream": false }
这里的stream默认是true,对于web访问来说,它会一个字一个字的返回,为了方便观看结果,我这里设为了false。
- 多轮会话
访问地址:127.0.0.1:11434/api/chat,Post方式,json参数
{ "model":"llama3.2", "messages":[ { "role":"user", "content":"为什么天空是蓝色的?" } ], "stream": false }
由于是多轮对话,我们可以继续写消息
{ "model":"llama3.2", "messages":[ { "role":"user", "content":"为什么天空是蓝色的?" }, { "role": "assistant", "content": "答案非常简单:因为地球的空气中含有大量的二氧化碳(CO2)和氮气(N2),这两个气体会与阳光中的紫外线发生反应,产生一种名为蓝色光的光波。这种现象被称为“气色效应”。\n\n在空气中,蓝色光是最主要的光波,而其他颜色的光则较弱。所以,当我们看到天空时,我们看到的是主要的蓝色光,因此我们的眼睛认为天空是蓝色的。\n\n不过,也有一个更复杂的理论——对比性理论,这个理论认为,天空看起来蓝色是因为它与地球表面的其他颜色相比,尤其是绿色和棕色。这两个颜色在日益减少的紫外线中更为明显,而蓝色则相对较弱。\n\n总之,天空的蓝色不是一个简单的物理现象,而是一个复杂的光学效应,需要我们考虑到多种因素。" }, { "role":"user", "content":"你能详细解释一下瑞利散射是如何工作的吗?" } ], "stream": false }
使用LlaMA-Factory微调llama3模型
LlaMA-Factory地址:https://github.com/hiyouga/LLaMA-Factory
LlaMA-Factory是一个用于大语言模型(LLM)微调的工具,旨在简化大语言模型的微调过程,使得用户可以快速的对模型进行训练和优化,以提高模型在特定任务上的性能。
这个工具支持多种预训练的大语言模型,例如LLaMA、LLaVA、Mixtral-MoE、QWen、Yi、Gemma、Baichuan、ChatGLM和Phi等。
特点:
- 支持多种微调方法:它集成了连续预训练,有监督微调(SFT),偏好对齐(RLHF)等多种微调方法。
- 高效的微调技术:与ChatGLM官方的P-Tuning微调相比,LLaMA Factory的LoRA微调提供了显著的加速比,并且在特定任务上取得了更高的性能分数。
- 易用性:LlaMA-Factory提供了高层次的抽象接口,使得开发者可以开箱即用,快速上手。
- WebUI支持:借鉴Stable Diffusion WebUI,该项目提供了基于gradio的网页工作台,方便初学者可以迅速上手操作。
- 模型导出和推理:支持模型导出和推理,包括动态合并LoRA模型进行推理。
- 环境配置
conda create -n llama_factory python=3.10 conda activate llama_factory git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .[metrics] cd /mnt mkdir -p workspace/models cd workspace/models git clone https://www.modelscope.cn/models/LLM-Research/Llama-3.2-3B-Instruct.git
重新到https://www.modelscope.cn/models/LLM-Research/Llama-3.2-3B-Instruct/files下载这两个safetensors文件
并将其放入到/mnt/workspace/models/Llama-3.2-3B-Instruct文件夹中。
- Lora微调
cd LLaMA-Factory/examples/train_lora
修改llama3_lora_sft.yaml,内容如下
### model model_name_or_path: /mnt/workspace/models/Llama-3.2-3B-Instruct ### method stage: sft do_train: true finetuning_type: lora lora_target: q_proj,v_proj ### dataset dataset: alpaca_zh_demo template: llama3 cutoff_len: 1024 max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 16 ### output output_dir: /mnt/workspace/models/llama-3.2-lora-zh logging_steps: 10 save_steps: 500 plot_loss: true overwrite_output_dir: true ### train per_device_train_batch_size: 1 gradient_accumulation_steps: 8 learning_rate: 1.0e-4 num_train_epochs: 3.0 lr_scheduler_type: cosine warmup_ratio: 0.1 bf16: true ddp_timeout: 180000000 ### eval val_size: 0.1 per_device_eval_batch_size: 1 eval_strategy: steps eval_steps: 500
回到LLaMA-Factory主文件夹执行
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
我们来看一下训练集中大致的内容,该训练集位于data目录下的alpaca_zh_demo.json,截取部分内容如下
[ { "instruction": "识别并解释给定列表中的两个科学理论:细胞理论和日心说。", "input": "", "output": "细胞理论是生物科学的一个理论,它认为所有生命体都是由微小的基本单元——细胞所构成。这是生物学的一个基础理论,认为细胞是所有生物的基本结构和功能单位,所有的生物都是由一个或多个细胞组成,细胞只能通过细胞分裂产生新的细胞。这一理论由薛定谔、施瓦内和雪莱于1839年首次提出。\n\n日心说是指太阳是太阳系的中心,也就是说,行星围绕太阳旋转的理论。这个理论打破了传统的地心说观点,认为地球并不是宇宙的中心。日心说的提出者是尼古拉·哥白尼,他在16世纪初发表了他的著作《天体运行论》,阐述了太阳系行星围绕太阳运行的模型,为天文学的发展做出了巨大贡献。" }, { "instruction": "输入三支篮球队的名称并生成一个适当的口号。", "input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。", "output": "输出: \"雷霆,公牛和网队:各显神通,角逐群雄!\"" }, { "instruction": "比较以下两位著名人物,使用特征列表并以句子形式提供输出。", "input": "人物1:阿尔伯特·爱因斯坦\n人物2:斯蒂芬·霍金\n特征:智力、教育、对世界的影响", "output": "阿尔伯特·爱因斯坦和斯蒂芬·霍金都是拥有极其出色智力的人物。两人都取得过非常高的教育成就,他们推进了科学发展并在世界范围内产生了深远的影响。爱因斯坦以其相对论和质能关系公式而闻名,而霍金以其关于黑洞和宇宙的发现而著称。两位科学家都以其深厚的学识和非凡的贡献影响了世界。" }, { "instruction": "请根据以下文章构建一个需要回答的问题。", "input": "", "output": "我不好意思,您没有提供任何信息或文章来供我根据它构建问题。 请提供相应的文章或信息,以便我能够帮助您构建问题。" }, { "instruction": "写一个关于上周末你做了什么的简短叙述。", "input": "", "output": "由于我是一个人工智能助手,所以我并不能真正的“做”什么事情。我的“工作”时间是24/7无休,确保我随时可供用户提供帮助和服务。所以在上周末,我一直都在“工作”,在响应用户的指令,帮助他们查询信息,执行操作,解决问题。" }, { "instruction": "创建一个程序,打印以下图案:", "input": "", "output": "您好!以下是一个打印指定图案的示例 Python 程序,它可以打印出一个类似字母“X”的图案。您可以使用程序中的一些规律性代码并对它进行更改,以打印您所需的图案。\n\n```python\nsize = 7\nfor row in range(size):\n for col in range(size):\n if row == col or row + col == size-1:\n print(\"*\", end=\" \")\n else:\n print(\" \",end=\" \")\n print()\n```\n\n输出:\n```\n* * \n * * \n * \n * * \n * * \n* *\n```" }, { "instruction": "分类以下数字系列。", "input": "输入:\n2、4、6、8", "output": "此系列数字为偶数序列。" }, { "instruction": "列出一个应该在野营应急包中的7件物品。", "input": "", "output": "这是一个我们应该在野营应急包中放置的7件物品列表:\n\n1. 先进救援包:用于治疗划痕,创伤,烧伤,刀伤等紧急情况。\n2. 多用途刀具:可用于切割,锯木,开瓶,刮刀等。\n3. 手电筒和备用电池:用于夜间照明。\n4. 火种:火柴或打火机,用于生火取暖或烹饪。\n5. 压缩饼干和能量棒:紧急能量补给。\n6. 可充电无线收音机:用于接收天气预报或求救信号。\n7. 防水雨衣和毛毯:用于防止降雨和保暖。" }, ... ]
如果我们要训练自己的专业领域数据集,也需要按照这种格式进行构建。
- 模型推理
修改LLaMA-Factory/examples/inference/llama3_lora_sft.yaml,内容如下
model_name_or_path: /mnt/workspace/models/Llama-3.2-3B-Instruct adapter_name_or_path: /mnt/workspace/models/llama-3.2-lora-zh template: llama3 finetuning_type: lora
在LLaMA-Factory主目录下执行
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
推理结果如下图所示

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OpenTelemetry 演示与 OpenTelemetry 的 Elastic 分发
作者:来自 ElasticRoger Coll 了解 Elastic 如何致力于支持用户使用 OpenTelemetry。探索我们对 OpenTelemetry Demo 的公开部署,并了解 Elastic 的解决方案如何增强你的可观察性体验。 最近,Elastic 为各种 OpenTelemetry 组件引入了 Elastic Distributions (EDOT),我们很自豪地宣布,这些 EDOT 组件现已在 Elastic 的 OpenTelemetry Demo 分支中可用。我们还公开了一个 Kibana 端点,让你可以深入了解演示的实时数据并亲自探索其功能。在这篇博文中,我们将详细说明分支背后的原因,并探索它引入的强大新功能。我们还将全面概述如何利用这些增强功能与 OpenTelemetry (EDOT) 的 Elastic Distributions 进行高级错误检测,以及 EDOT Collector(Elastic Agent 的尖端发展)进行无缝数据收集和分析。 什么是 OpenTelemetry 演示? OpenTelemetry 演示是一个基于微服务的应用程序,...
- 下一篇
LangChain4j 使用 Elasticsearch 作为嵌入存储
作者:来自 ElasticDavid Pilato LangChain4j(Java 版 LangChain)将 Elasticsearch 作为嵌入存储。了解如何使用它以纯 Java 构建 RAG 应用程序。 在上一篇文章中,我们发现了 LangChain4j 是什么以及如何: 通过使用 y 和 z 实现 x 与 LLM 进行讨论 在内存中保留聊天记录以回忆之前与 LLM 讨论的上下文 这篇博文介绍了如何: 从文本示例创建向量嵌入 将向量嵌入存储在 Elasticsearch 嵌入存储中 搜索相似的向量 创建嵌入 要创建嵌入,我们需要定义要使用的 EmbeddingModel。例如,我们可以使用上一篇文章中使用的相同 mistral 模型。它与 ollama 一起运行: EmbeddingModel model = OllamaEmbeddingModel.builder() .baseUrl(ollama.getEndpoint()) .modelName(MODEL_NAME) .build(); 模型能够从文本生成向量。在这里我们可以检查模型生成的维数: Lo...
相关文章
文章评论
共有0条评论来说两句吧...