LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/141028040

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


Ollama

Ollama 是用于构建和运行大型语言模型(LLM)应用的开源工具,提供了一个简洁易用的命令行界面和服务器,让用户能够轻松下载、运行和管理各种开源 LLM,默认支持大量模型,如果是 HuggingFace 最新模型,或者自制模型,支持转换成 GGUF 格式,再进行调用。

1. 下载 Llama 3.1 8B Instruct 模型

Llama 3.1 包括两个版本,即 Llama 3.1 与 Llama 3.1 Instruct,主要区别在于训练目标和用途:

  • Llama 3.1 8B:基础模型,主要用于生成文本完成任务,接受输入提示并生成相应的文本,但没有特别针对指令或对话进行优化。

  • Llama 3.1 8B Instruct:在基础模型上进行指令微调的版本,专门针对指令跟随和多轮对话进行了优化,适用于助手型任务和更复杂的对话场景。这种微调使得在处理用户指令和对话时表现更好,更加自然和连贯。

参考:HuggingFace - Meta Llama

HuggingFace

安装 HuggingFace 下载工具,使用镜像下载速度明显加快:

export HF_ENDPOINT="https://hf-mirror.com"
pip install -U huggingface_hub hf-transfer

Meta-Llama-3.1-8B-Instruct 为例,下载脚本,如下:

huggingface-cli download --token [your token] meta-llama/Meta-Llama-3.1-8B-Instruct --local-dir Meta-Llama-3.1-8B-Instruct

下载之前需要申请权限,Token 地址来源于:https://huggingface.co/settings/tokens,全部勾选即可生成。

2. HuggingFace 大模型转换成 GGUF 格式

GGUF (GPT-Generated Unified Format) 是专为大型语言模型设计的二进制文件格式,由 Georgi Gerganov 提出,目的是解决大模型在存储、加载、兼容性和扩展性方面的挑战。

主要特点和优势:

  • 高效存储:优化了数据的存储方式,减少了存储空间的占用。
  • 快速加载:支持快速加载模型数据,适用于需要即时响应的应用场景。
  • 兼容性:提高了不同平台和框架之间的兼容性,使得模型可以在不同环境和硬件上无缝运行。
  • 可扩展性:设计时考虑了未来的扩展性,以适应更大规模的模型和更复杂的数据结构。

GGUF 格式在 Hugging Face 等开源社区中广受欢迎,特别适用于大型模型的部署和分享。

工程:https://github.com/ggerganov/llama.cpp.git

下载与编译工程:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

编译 make 完成的日志,如下:

OPENMP -DGGML_USE_LLAMAFILE  -c examples/deprecation-warning/deprecation-warning.cpp -o examples/deprecation-warning/deprecation-warning.o
c++ -std=c++11 -fPIC -O3 -g -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wmissing-declarations -Wmissing-noreturn -pthread -fopenmp  -march=native -mtune=native -Wno-array-bounds -Wno-format-truncation -Wextra-semi -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_OPENMP -DGGML_USE_LLAMAFILE  examples/deprecation-warning/deprecation-warning.o -o main  
NOTICE: The 'main' binary is deprecated. Please use 'llama-cli' instead.
c++ -std=c++11 -fPIC -O3 -g -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wmissing-declarations -Wmissing-noreturn -pthread -fopenmp  -march=native -mtune=native -Wno-array-bounds -Wno-format-truncation -Wextra-semi -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_OPENMP -DGGML_USE_LLAMAFILE  examples/deprecation-warning/deprecation-warning.o -o server  
NOTICE: The 'server' binary is deprecated. Please use 'llama-server' instead.

将大语言模型由 HuggingFace 格式转换成 GGUF 格式:

python llama.cpp/convert_hf_to_gguf.py llm/Meta-Llama-3-8B/ --outfile Meta-Llama-3-8B.gguf

编译完成的 Meta-Llama-3-8B.gguf 大约 15G 左右。

编写 modelfile 文件,vim Meta-Llama-3-8B.modelfile,需要修改 GGUF 的文件路径,其余保持不变,即:

FROM "./Meta-Llama-3-8B.gguf"
TEMPLATE "{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>{{ end }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>

注意:modelfile之后的指令内容,必须保持一致,或者符合一定规则,否则 Ollama 运行时,回答混乱。

使用 Ollama 创建模型服务:

ollama create Meta-Llama-3-8B -f Meta-Llama-3-8B.modelfile
ollama list

其他模型的 modelfile,即:

ollama show --modelfile qwen:7b

输出如下:

# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM qwen:7bFROM ollama_models/blobs/sha256-87f26aae09c7f052de93ff98a2282f05822cc6de4af1a2a159c5bd1acbd10ec4
TEMPLATE "{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>{{ end }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
# ...

Meta-Llama-3-8B 的输出如下:

Meta-Llama-3-8B
Meta-Llama-3.1-8B-Instruct 的输出如下:
Instruct

界面参考 Ollama + OpenWebUI,即 使用 Ollama + OpenWebUI 在 Linux 服务器中高效部署大语言模型

配置 Conda 环境,自动初始化 conda:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/conda/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; theneval "$__conda_setup"
elseif [ -f "/opt/conda/etc/profile.d/conda.sh" ]; then. "/opt/conda/etc/profile.d/conda.sh"elseexport PATH="/opt/conda/bin:$PATH"fi
fi
unset __conda_setup
# <<< conda initialize <<<

构建 conda 环境:

conda create -n ollama-default python=3.9

下载最新版本的 PyTorch:

PyTorch

pip3 install torch=2.4.0 torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

清华源的下载速度,明显快于阿里云的源。

测试:

pythonimport torch
print(torch.__version__)  # 1.13.1
print(torch.cuda.is_available())  # True
exit()

参考:

  • GitHub - Ollama Model File
  • Ollama教程——进阶篇:【自定义模型】如何将模型高效导入到ollama框架
  • Ollama + HuggingFace - by Sudarshan Koirala

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

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

相关文章

【Linux】Ubuntu20.04系统中能在命令行ping通百度等网站,而在浏览器中不能上网的问题解决方法

今天离开学校&#xff0c;在家中打开ubuntu系统准备上网&#xff0c;发现浏览器打不开&#xff0c;但是QQ是可以发消息的&#xff0c;证明WIFI应该是没有问题的&#xff0c;但是谷歌和火狐浏览器就是打不开网址&#xff0c;很奇怪&#xff01; 先检查我们Linux能不能ping通 开一…

基于Jakarta,TypeScript,Golong的国密SM2、3、4

文章目录 前言一. Jakarta代码二. TypeScript三.golang 前言 最近还要深度研究hutools底层实现&#xff0c;一定要搞透澈&#xff0c;本章将会是持续更新 所有密钥由Jakarta统一生成&#xff0c;因为没测试其他语言生成是否可以 参考资料&#xff1a; Java代码实现SM2算法以及…

整理 钢琴 基础知识

大普表和钢琴键盘对照表 一 大普表和钢琴键盘对照表 二 五线谱、键位、左右手 八分音符 坐姿 手型

机器学习——支持向量机(SVM)(1)

目录 一、认识SVM 1. 基本介绍 2. 支持向量机分类器目标 二、线性SVM分类原理&#xff08;求解损失&#xff09; 三、重要参数 1. kernel&#xff08;核函数&#xff09; 2 .C&#xff08;硬间隔与软间隔&#xff09; 四、sklearn中的支持向量机&#xff08;自查&#…

使用Adobe Photoshop CS5给图片加水印

使用Adobe Photoshop CS5给图片加水印 前言1.我这里使用的是Adobe Photoshop CS52.新建空白画布3.写入水印内容4.按 Ctrl T 将其倾斜5.右键图层选择“混合选项”6.选择描边&#xff0c;颜色选择灰色7.效果如下8.填充选择0&#xff0c;不透明度选择75%9.打开编辑&#xff0c;选…

transformer中编码器之间是串行还是并行的;算力共享中,transformer实现编码器并行运行,怎么进行聚合的

目录 transformer中编码器之间是串行还是并行的 1. 编码器结构的独立性 2. 编码器内部的并行处理 3. 编码器之间的数据流 4. 训练阶段的并行性 算力共享中,transformer实现编码器并行运行,怎么进行聚合的 编码器并行运行的实现 编码器的输出聚合 举例说明 transform…

对 Go 语言中循环屏障 CyclicBarrier 的理解

同步屏障 (Barrier) 是并发编程中的一种同步方法。对于一组 goroutine ,程序中的一个同步屏障意味着任何 goroutine 执行到此后都必须等待,直到所有的 goroutine 都达到此点才可继续执行下文。 Barrier 无论是翻译成屏障、障碍还是栅栏,都很形象,就是一道拦截坝,拦截一组对…

国内大量家用路由器惨遭DNS劫持,你中招了吗?

近期&#xff0c;D妹收到不少用户反馈&#xff0c;在访问网站或APP时都遭遇了访问失败的问题。经深入排查&#xff0c;我们监测到大量家用路由器的DNS解析配置被篡改&#xff0c;从而影响到了正常的网站和APP访问。 该情况于2024年5月开始出现&#xff0c;于8月5日集中爆发达到…

图像变换算法

1.1 傅里叶变换 (Fourier Transform) 介绍 傅里叶变换是一种数学变换&#xff0c;用于将图像从空间域转换到频率域。它广泛应用于图像去噪和滤波。 原理 傅里叶变换将图像表示为频率成分的叠加&#xff0c;使得频率成分可以独立处理。通过对频率成分的分析和处理&#xff0…

【登录扫码】--集成企业微信

背景&#xff1a; 在系统的登录流程中&#xff0c;我们引入了一种创新的扫码登录方式&#xff0c;旨在提升用户体验与安全性。此流程的核心在于通过生成并扫描二维码来实现快速、便捷的登录认证 调用流程详细说明&#xff1a; 扫码登录选择&#xff1a;用户首先访问系统登录页面…

STM32的SDIO接口详解

目录 1. 定义与兼容性 2. SDIO时钟 3. SDIO命令与响应 4. SDIO块数据传输 5. SDIO控制器的硬件结构 6.代码实现 1.SD初始化 2.测试SD卡的读取 3.测试SD卡的写入 STM32的SDIO&#xff08;Secure Digital Input/Output&#xff0c;安全数字输入输出&#xff09;接口是一…

010集——按值传递、按引用传递等方法——C#学习笔记

按值传递参数 这是参数传递的默认方式。在这种方式下&#xff0c;当调用一个方法时&#xff0c;会为每个值参数创建一个新的存储位置。 实际参数的值会复制给形参&#xff0c;实参和形参使用的是两个不同内存中的值。所以&#xff0c;当形参的值发生改变时&#xff0c;不会影…

Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现

用数据表格table展示系统数据&#xff0c;是LayUI的基本功能&#xff0c;编码十分简单&#xff0c;就是通过table.render()渲染&#xff0c;把属性配置好就OK了&#xff0c;十分方便&#xff0c;功能也十分强大。 不过&#xff0c;在实现时&#xff0c;把table的有个功能却理解…

ue4.27 C++ 解析内容为json的字符串

json字符串为 R"({"x": -1870.0, "y": -11400.0})"&#xff0c;里面内容是个json对象。 const FString& Message R"({"x": -1870.0, "y": -11400.0})"; TSharedRef<TJsonReader<>> Reader TJs…

Java Nacos与Gateway的使用

Java系列文章目录 IDEA使用指南 Java泛型总结&#xff08;快速上手详解&#xff09; Java Lambda表达式总结&#xff08;快速上手详解&#xff09; Java Optional容器总结&#xff08;快速上手图解&#xff09; Java 自定义注解笔记总结&#xff08;油管&#xff09; Jav…

Python:jupyter 模型可视化(VS)

step1:打开vs安装扩展 安装后重新启动vs 建立可视化模型 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn import treemusic_data pd.read_csv(music.csv)Xmusic_data.drop(columns[genre]) Ymusic_data[genre]modelDecisionTreeClassifie…

IDEA构建SpringBoot多模块项目

前言 最近一直在思考一个问题&#xff0c;springboot的多模块项目到底是怎么运行和运作的&#xff1f; 一般我们大部分的springboot项目都是单模块的项目&#xff0c;但是如果后续有要求开发多模块的项目应该怎么处理&#xff1f;于是基于这点进行了研究。 本次文章将会带大…

java语言特点

Java语言是一种广泛使用的编程语言&#xff0c;它具有以下几个显著的特点&#xff1a; 面向对象&#xff1a;Java是一种纯面向对象的语言&#xff0c;它支持类的封装、继承和多态等特性。面向对象的设计使得Java程序更加模块化&#xff0c;易于维护和扩展。 平台无关性&#xf…

Linux驱动开发基础(Hello驱动)

所学内容来自百问网 目录 1. 文件在内核中的表示 2. 打开字符设备节点时&#xff0c;内核中也有对应的struct file 3. 编写驱动程序步骤 4. 相关知识点 4.1 涉及函数解析 4.2 module_init/module_exit的实现 4.3 register_chrdev的内部实现 4.4 class_destroy/device_…

K8s知识内容总结

1. K8s是个什么东西&#xff1f;解决了什么核心问题&#xff1f;相比docker有什么核心优势&#xff1f; k8s源于google内部的一个集群管理系统&#xff0c;它是用来管理集群的。比例&#xff0c;一个大型的电商系统&#xff0c;在微服务架构模式下&#xff0c;一个集群中可能有…