当前位置: 首页 > news >正文

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.lryc.cn/news/418967.html

相关文章:

  • 如何实现Redis和Mysql中数据双写一致性
  • three.js 模型高亮效果实现说明(结合react)
  • 入营测评题解
  • 制造知识普及(十)-- 常见的工业软件介绍
  • Windows系统设置网络IPv4和IPv6优先访问级
  • yolov8 剪枝 - DepGraph
  • 【网络】套接字socket编程预备知识
  • 【学习笔记】Day 8
  • springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
  • 从入门到精通:大学生编程技能提升全攻略
  • C# .NET Framework的特殊委托
  • C# 判断电脑是否联网
  • 爬虫解析代码结构
  • day 23 进程间通信—管道
  • Python酷库之旅-第三方库Pandas(073)
  • 使用easyexcel导出,发生了Exception: could not find acceptable repesentation
  • android display 笔记(五)HWC(Hardware Composer)
  • 【模电笔记】——集成运算放大电路
  • Android Studio Gradle多渠道打包
  • 什么是DNS缓存?DNS缓存有哪些作用和危害?
  • web基础与http协议与配置
  • 机械学习—零基础学习日志(python编程2)
  • element-plus的表单输入框有清除按钮的,文字输入前后宽度不一致怎么解决
  • 解决Docker拉取镜像时 i/o timeout错误
  • 面壁的智能开源 MiniCPM-V 2.6 边缘人工智能多模态功能与 GPT-4V 不相上下
  • dhcp+checkkickstar的实验理解
  • Android网络安全:如何防止中间人攻击
  • NOI Linux 2.0 的安装说明以及使用指南
  • 07、MySQL-多表查询
  • 20240809 每日AI必读资讯