随着大型语言模型(LLM)的飞速发展,Hugging Face 已成为开源模型的"GITHUB"。然而,对于希望在本地环境运行这些模型的开发者而言(文件和内容隐私),往往面临网络访问不畅、模型体积庞大、部署流程复杂等挑战。本文旨在提供一个严谨、高效的解决方案,在中国大陆网络环境下,利用镜像顺利下载模型,通过 llama.cpp 进行轻量化量化,并最终使用 Ollama
由于网络环境的限制,直接从 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
克隆仓库
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
将之前利用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 是自己命名的转化后的文件
上一步得到的文件其实已经可以用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
常见的量化参数:
现在,我们拥有了 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 许可协议。转载请注明出处!