MacBookPro部署DeepSeek-R1基于Unsloth动态量化版本

发表于 2025-02-23  2.34k 次阅读


文章目录

一、硬件配置

官方建议:

1.58 位量化应适合 160GB 的 VRAM 以进行快速推理(2x H100 80GB),吞吐量约为每秒 140 个令牌,单用户推理为每秒 14 个令牌。您不需要 VRAM (GPU) 来运行 1.58 位 R1,只需 20GB 的 RAM (CPU) 就可以工作,但可能会很慢。为了获得最佳性能,我们建议 VRAM + RAM 的总和至少为 80GB+。

本次部署配置:

CPU:16核
RAM:64G
VRAM:8G

二、动态量化各版本的对比

MoEDISKTypeQualityLinkDown_proj
1.58-bit131GBIQ1_S公平下载链接2.06/1.56bit
1.73-bit158GBIQ1_M下载链接2.06bit
2.22-bit183GBIQ2_XXS更好下载链接2.5/2.06bit
2.51-bit212GBQ2_K_XL最好下载链接3.5/2.5bit
其他完整、蒸馏版本参阅官网:https://huggingface.co/collections/unsloth/deepseek-r1-all-versions-678e1c48f5d2fce87892ace5

层数

QuantFile Size24GB GPU80GB GPU2x80GB GPU
1.58bit131GB73361
1.73bit158GB52657
2.22bit183GB42249
2.51bit212GB21922
DeepSeek R1 有 61 层。例如,对于 24GB GPU 或 80GB GPU,您可以预期在向下舍入后卸载(如果内存不足,则减少 1):

也可以搭配GRPO和Unsloth蒸馏版本进行训练自己的推理模型 GRPO+Unsloth

三、下载模型文件

1.下载并安装XDM下载器

https://xtremedownloadmanager.com

2.选择File>Add URL

3.打开模型链接依次单个文件复制到XDM下载器中,https://huggingface.co/unsloth/DeepSeek-R1-GGUF

如果国内网络不通的情况下可以修改下解析:

#vi /etc/hosts
13.35.202.34 huggingface.co

四、合并模型文件

将下载的 3 个 GGUF 拆分文件合并为 1 个(根据自己下载的进行修改命令,下方提供三个模板)

# /usr/local/Cellar/llama.cpp/4743/bin/llama-gguf-split --merge DeepSeek-R1-UD-IQ1_M-00001-of-00004.gguf DeepSeek-R1-UD-IQ1_M.gguf
# /usr/local/Cellar/llama.cpp/4743/bin/llama-gguf-split --merge DeepSeek-R1-Q4_K_M-00001-of-00009.gguf DeepSeek-R1-Q4_K_M.gguf
# /usr/local/Cellar/llama.cpp/4743/bin/llama-gguf-split --merge DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf DeepSeek-R1-UD-IQ1_S.gguf

五、使用llama安装部署(llama和ollama任一即可)

MAC安装llama(mac 如果是amd显卡目前没法用,只能用cpu)

# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" #mac安装Brew
# brew install llama.cpp

Linux安装llama

apt-get update
apt-get install build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggerganov/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp



更改安装目录
sudo systemctl edit ollama

并在第二行后添加以下行(即在 “” 和 “”) 之间### Anything between here and the comment below will become the contents of the drop-in file### Edits below this comment will be discarded

[Service]
Environment="OLLAMA_MODELS=/path/to/your/directory"

然后重新启动 ollama 服务

sudo systemctl restart ollama

CUDA编译:
已安装CUDA toolkit (驱动固件)
cmake -B build -DGGML_MUSA=ON \
  -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
cmake --build build --config Release

CANN编译:
已安装CANN Toolkit(驱动固件)
cmake -B build -DGGML_CANN=on -DCMAKE_BUILD_TYPE=release
cmake --build build --config release
测试:./build/bin/llama-cli -m PATH_TO_MODEL -p "Building a website can be done in 10 steps:" -ngl 32


HIP编译:
已安装ROCm
HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -R)" \
    cmake -S . -B build -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1030 -DCMAKE_BUILD_TYPE=Release \
    && cmake --build build --config Release -- -j 16
在 Linux 上,还可以使用统一内存架构 (UMA) 在 CPU 和集成 GPU 之间共享主内存,方法是将 . 但是,这会损害非集成 GPU 的性能(但允许使用集成 GPU)。-DGGML_HIP_UMA=ON
安装ROCm

#brew install cmake llvm libfabric rocm-device-libs hipify clang-format hcc hip rocminfo rocprim rocrand rocsolver rocblas rocprim
#brew install cmake llvm libfabric  clang-format


Metal编译:
在 MacOS 上,Metal 默认处于启用状态。使用 Metal 使计算在 GPU 上运行。 要在编译时禁用 Metal 构建,请使用 cmake 选项。-DGGML_METAL=OFF使用 Metal 支持构建时,您可以使用命令行参数显式禁用 GPU 推理。--n-gpu-layers 0

使用llama运行模型

在MAC上运行(例子对于 Apple Metal 设备,请注意 --n-gpu-layers。如果您发现计算机内存不足,请减少内存。对于 128GB 的统一内存计算机,您应该能够卸载 59 层左右。)

./llama.cpp/llama-cli \
    --model DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
    --cache-type-k q4_0 \
    --threads 16 \
    --prio 2 \
    --temp 0.6 \
    --ctx-size 8192 \
    --seed 3407 \
    --n-gpu-layers 59 \
    -no-cnv \
    --prompt "<|User|>Create a Flappy Bird game in Python.<|Assistant|>"

--threads == 你有多少个 CPU 内核

--ctx-size == 输出的上下文长度

--n-gpu-layers == 要卸载到你的 GPU 的层数(从层数表中获取)

--prompt 提问

在Linux上运行(例如,在具有 24GB VRAM/内存的 RTX 4090 GPU 上,我们这样做:)

./llama.cpp/llama-cli \
    --model DeepSeek-R1-GGUF/DeepSeek-R1-UD-IQ1_S/DeepSeek-R1-UD-IQ1_S-00001-of-00003.gguf \
    --cache-type-k q4_0 \
    --threads 16 \
    --prio 2 \
    --temp 0.6 \
    --ctx-size 8192 \
    --seed 3407 \
    --n-gpu-layers 7 \
    -no-cnv \
    --prompt "<|User|>Create a Flappy Bird game in Python.<|Assistant|>"

--threads == 你有多少个 CPU 内核

--ctx-size == 输出的上下文长度

--n-gpu-layers == 要卸载到你的 GPU 的层数(从层数表中获取)

六、使用ollama安装部署(llama和ollama任一即可)



1.linux安装ollama
# curl -fsSL https://ollama.com/install.sh | sh
2.mac安装ollama
https://ollama.com/download
下载后直接图形化安装

2.创建一个指导ollama创建模型的模型文件

这个DeepSeekQ1_Modelfile 使用的是 DeepSeek-R1-UD-IQ1_M
 FROM /home/snowkylin/DeepSeek-R1-UD-IQ1_M.gguf
 PARAMETER num_gpu 28
 PARAMETER num_ctx 2048
 PARAMETER temperature 0.6
 TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
这个DeepSeekQ4_Modelfile 使用的是 DeepSeek-R1-Q4_K_M
 FROM /home/snowkylin/DeepSeek-R1-Q4_K_M.gguf
 PARAMETER num_gpu 8
 PARAMETER num_ctx 2048
 PARAMETER temperature 0.6
 TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
#num_gpu要卸载到你的 GPU 的层数(从层数表中获取)
#num_ctx 上下文长度 可以在开始时保持较小值,以便模型适合内存,然后您可以逐渐增加它,直到发生 OOM。

# vim DeepSeekIQ1_Modelfile
FROM /home/test/DeepSeek-R1-UD-IQ1_S.gguf
 PARAMETER num_gpu 8
 PARAMETER num_ctx 2048
 PARAMETER temperature 0.6
 TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"

3.在ollama创建模型

ollama create DeepSeek-R1-UD-IQ1_S -f DeepSeekQ1_Modelfile

4.在ollama运行模型

 ollama run DeepSeek-R1-UD-IQ1_S --verbose

如果在初始化模型或生成模型时仍然出现 OOM/CUDA 错误,您也可以尝试以下操作

  • 增加系统的交换空间以扩大可用的 RAM。(最好不要依赖这个,这会大大减慢生成速度。当 ollama 错误地高估了内存需求并且不允许您运行模型时,请使用它)
  • 在模型文件中设置参数,告诉LLM允许生成的最大代币数量,然后重新创建并重新运行模型。num_predict

如何指定上下文窗口大小?

默认情况下,Ollama 使用的上下文窗口大小为 2048 个令牌。

要在使用 时更改此设置,请使用 :ollama run/set parameter

/set parameter num_ctx 4096

ollama run DeepSeek-R1-UD-IQ1_S /set parameter num_ctx 4096 --verbose

如何判断我的模型是否已加载到 GPU 上?

使用该命令查看当前加载到内存中的模型。ollama ps

ollama ps

输出

NAME      	ID          	SIZE 	PROCESSOR	UNTIL
llama3:70b	bcfb190ca3a7	42 GB	100% GPU 	4 minutes from now

该列将显示模型加载到哪个内存:Processor

  • 100% GPU表示模型已完全加载到 GPU 中
  • 100% CPU表示模型完全加载到系统内存中
  • 48%/52% CPU/GPU表示模型已部分加载到 GPU 和系统内存中




运行Ollama在Open WebUI

##后续

Ollama 利用 AMD ROCm 库,该库并不支持所有 AMD GPU。在 在某些情况下,您可以强制系统尝试使用类似的 LLVM 目标,即 关闭。例如:Radeon RX 5400 是(也称为 10.3.4) 但是,ROCm 目前不支持此目标。最接近的支持是 。您可以将环境变量与 syntax 一起使用。因此,例如,要强制系统在 RX 5400 上运行,您需要 将设置为 服务器。如果您有不受支持的 AMD GPU,则可以使用 支持的类型如下。gfx1034gfx1030HSA_OVERRIDE_GFX_VERSIONx.y.zHSA_OVERRIDE_GFX_VERSION="10.3.0"

如果您有多个具有不同 GFX 版本的 GPU,请附加数字设备 number 添加到环境变量中以单独设置它们。例如,和HSA_OVERRIDE_GFX_VERSION_0=10.3.0HSA_OVERRIDE_GFX_VERSION_1=11.0.0

报错:

1. Error: llama runner process has terminated: GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS) failed

版本问题,升级后解决

2.Error: llama runner process has terminated: signal: killed

资源耗尽被系统杀掉进程,扩容硬件或者降低模型配置

export OLLAMA_KEEP_ALIVE=-1 export OLLAMA_SCHED_SPREAD=1

让Ollama运行时尽量占满GPU,然后重新Ollama run 模型

LLAMA github:https://github.com/ggml-org/llama.cpp.git

unsloth: https://unsloth.ai/blog/deepseekr1-dynamic

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

scanz个人博客