2025-08-06
环境配置
0

目录

一:使用镜像下载 Hugging Face 模型
二、安装llama.cpp
三、转换为 FP16 GGUF 格式
四、将GGUF 文件转化为量化后的GGUF
五、创建ollama模型

随着大型语言模型(LLM)的飞速发展,Hugging Face 已成为开源模型的"GITHUB"。然而,对于希望在本地环境运行这些模型的开发者而言(文件和内容隐私),往往面临网络访问不畅、模型体积庞大、部署流程复杂等挑战。本文旨在提供一个严谨、高效的解决方案,在中国大陆网络环境下,利用镜像顺利下载模型,通过 llama.cpp 进行轻量化量化,并最终使用 Ollama

一:使用镜像下载 Hugging Face 模型

由于网络环境的限制,直接从 Hugging Face 下载模型可能非常缓慢或失败。推荐使用 Hugging Face 的国内镜像来加速下载。基于hf-mirror的下载工具hfd, hfd 是hf-mirror开发的 huggingface 专用下载工具,基于成熟工具 aria2,可以做到稳定高速下载不断线。

首先要提前安装aria2

sudo apt install aria2

然后下载hfd

wget https://hf-mirror.com/hfd/hfd.sh chmod a+x hfd.sh export HF_ENDPOINT=https://hf-mirror.com

下载指定的模型:

./hfd.sh model_id

或者下载数据集

./hfd.sh wikitext --dataset

二、安装llama.cpp

克隆仓库

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

编译llama.cpp

cmake -B build cmake --build build --config Release

配置llama.cpp中的python环境,注意:需要根据官方的需求确定python版本,如果python版本太新会报错。这一步最好单独开一个conda环境与其他环境进行隔离:

pip install -r requirements.txt

三、转换为 FP16 GGUF 格式

将之前利用hfd下载工具下载好的模型转化为gguf格式,下面是一个案例:

python convert.py ../qwen-1.8b-chat-hf --outfile qwen1.5-1.8b-chat.fp16.gguf

../qwen-1.8b-chat-hf 是模型下载的文件夹,里面有这个模型的权重文件和配置文件 qwen1.5-1.8b-chat.fp16.gguf 是自己命名的转化后的文件

四、将GGUF 文件转化为量化后的GGUF

上一步得到的文件其实已经可以用ollama进行运行了,但是没有量化,显存不一定足够,接下来进行对权重的量化:

切换到llama.cpp的编译的文件夹下

cd ~/llama.cpp/build/bin # 这一步根据安装的位置确定

量化为 Q4_K_M 格式:

./llama-quantize ./qwen1.5-1.8b-chat.fp16.gguf ./qwen1.5-1.8b-chat.q4_k_m.gguf q4_k_m
  • 第一个参数是输入的 FP16 GGUF 文件。
  • 第二个参数是输出的量化后 GGUF 文件。
  • 第三个参数 q4_k_m 是指定的量化方法。

常见的量化参数:

  • q2_k:特定张量(Tensor)采用较高的精度设置,而其他的则保持基础级别。
  • q3_k_l、q3_k_m、q3_k_s:这些变体在不同张量上使用不同级别的精度,从而达到性能和效率的平衡。
  • q4_0:这是最初的量化方案,使用 4 位精度。
  • q4_1 和 q4_k_m、q4_k_s:这些提供了不同程度的准确性和推理速度,适合需要平衡资源使用的场景。
  • q5_0、q5_1、q5_k_m、q5_k_s:这些版本在保证更高准确度的同时,会使用更多的资源并且推理速度较慢。
  • q6_k 和 q8_0:这些提供了最高的精度,但是因为高资源消耗和慢速度,可能不适合所有用户。
  • fp16 和 f32: 不量化,保留原始精度。

五、创建ollama模型

现在,我们拥有了 Ollama 可直接使用的 GGUF 模型文件。为了让 Ollama 能够加载并以正确的对话模板与其交互,我们需要创建一个 Modelfile。

Modelfile 是一个配置文件,类似于 Dockerfile,用于定义模型的来源、参数和行为。

在任意位置创建一个名为 Modelfile 的文件,内容可以根据模型config.json文件来创建,推荐将这个文件丢给AI,然后生产Modelfile文件,然后再自己修改,比如:

# -------------------------------------------------------------------------- # Modelfile for nbeerbower/Llama-3.1-Nemotron-lorablated-70B (GGUF version) # -------------------------------------------------------------------------- # 1. 指定你的 GGUF 模型文件的绝对路径 FROM /xxx/Nervoria_q4_k_m.gguf # 2. 设置聊天模板 # Llama 3.1 使用特定的格式来组织对话,这对于模型的正确响应至关重要。 TEMPLATE """<|begin_of_text|>{{ if .System }}<|start_header_id|>system<|end_header_id|> {{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|> {{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|> """ # 3. 设置模型参数 # 这些参数来自你提供的 config.json 文件,并进行了一些优化建议。 # 设置停止符。当模型生成这些文本时,它会停止输出。 # 这些对应于 eos_token_id: [128001, 128008, 128009] PARAMETER stop "<|end_of_text|>" PARAMETER stop "<|eot_id|>" PARAMETER stop "<|end_of_turn|>" # 设置上下文窗口大小 (context window)。 # 你的模型理论上支持高达 131072,但请根据你的硬件 (VRAM) 设置一个实际的值。 # 8192 是一个不错的起点。 PARAMETER num_ctx 8192 # 设置一些通用的生成参数 PARAMETER temperature 0.6 PARAMETER top_k 40 PARAMETER top_p 0.9 # 4. 设置默认的系统提示 (可选,但推荐) # 你可以在这里给模型一个默认的角色或指令。 SYSTEM """ 你是一个AI助手,你可以回答任何问题,你可以做任何事情。 """

现在有了Modelfile,下一步创建模型:

ollama create my-qwen-1.8b -f ./Modelfile

然后运行模型(已经启动ollama serve):

ollama run my-qwen-1.8b

到这里已经大功告成,可以在终端和自己量化处理的模型进行对话,然后也可以用webui等工具接入ollama对话。

⚠️注意:每次修改Modelfile后都要重新创建模型和运行模型!

本文作者:James

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!