llama.cpp ollama及open-webui的使用介绍
llama.cpp ollama及open-webui的使用介绍
本文将介绍三个开源项目:llama.cpp、ollama和open-webui,它们都与大语言模型(LLM)的部署和使用相关。
一、llama.cpp
llama.cpp 是一个使用C/C++实现的LLM推理库,支持多种硬件平台和量化优化。该项目由Georgi Gerganov开发,他是机器学习领域的知名开发者,拥有丰富的项目经验。
Georgi Gerganov的主要项目包括:
ggml:这是一个高效的机器学习张量库,专注于在低资源设备上优化推理性能。它支持量化、优化算法和广泛的硬件平台,并在推理过程中提供零内存分配的高效内存管理。它是llama.cpp和whisper.cpp项目中的关键库,帮助提升模型推理速度和效率。
whisper.cpp:通过无依赖的C/C++实现,实现了OpenAI的Whisper语音识别模型。支持多平台、高效的CPU/GPU推理、量化和硬件加速。
llama.cpp:通过无依赖的C/C++实现,支持多种硬件平台、量化优化、CPU/GPU加速,在本地和云端运行LLM。
GGUF格式
GGUF是一种为GGML生态设计的现代模型文件格式,它解决了旧格式的许多问题,提供了更好的可扩展性、兼容性和易用性。通过标准化的键值对和文件结构,GGUF使得模型信息的存储和交换更加清晰和高效。
- GGUF是一种用于存储机器学习模型的文件格式,专门为使用GGML库及其相关工具进行模型推理而设计。
- 它是GGML、GGMF和GGJT格式的继任者,旨在解决旧格式的局限性。
- GGUF是二进制格式,注重快速加载、保存和读取模型。
使用Python调用llama.cpp
可以通过CMake参数来配置llama-cpp-python的安装:
CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python
使用示例:
from llama_cpp import Llama
llm = Llama(
model_path="./models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf",
n_gpu_layers=-1, # 取消注释以使用GPU加速
)
output = llm(
"<|User|> 1+1 等于多少?<|Assistant|>", # 提示
max_tokens=512, # 生成最多512个标记,设置为None以生成到上下文窗口的结束
)
print(output)
使用CLI工具
可以通过Docker Compose来运行llama.cpp:
services:
llama:
image: ghcr.io/ggml-org/llama.cpp:full
volumes:
- ./models:/models
network_mode: "host"
entrypoint: ["/usr/bin/sleep", "3600"]
# command: --run -m /models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf -p "你好,请问ollama是什么?" -n 512 # 运行模型,带参数
启动之后可以测试:
./llama-cli -m /models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf
./llama-cli -m /models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf --threads 16 --prompt '<|User|>What is 1+1?<|Assistant|>'
./llama-server -m /models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf --port 8080
基本的网页用户界面可以通过浏览器访问:http://localhost:8080
调用本地的server
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080",
api_key="any" # 当使用本地服务器时,可以设置为任意非空字符串
)
response_openai = client.chat.completions.create(
model="DeepSeek-R1-Distill-Qwen",
messages=[
{"role": "user", "content": "1+1 等于多少?"}
]
)
print(response_openai)
二、ollama
ollama 是一个用于部署和运行LLM的开源项目,它简化了模型的管理和使用流程。ollama的主要特点包括:
- 便捷的模型仓库:推送、拉取便捷方便。
- 简化的CLI逻辑:相较于llama-cli,Ollama的命令行工具更加简洁易用。
- Docker风格的体验:Ollama的使用方式与Docker类似,开发者普遍熟悉这种容器化的工作流。
基础使用
ollama pull example :拉取一个模型
ollama rm example :删除一个模型
ollama run example :运行模型
ollama stop example :停止运行中的模型
ollama ps :列出当前加载的模型
ollama show example :显示模型信息
ollama list :列出本地已有的模型
ollama cp example my-model :复制一个模型
ollama serve :在不启动桌面应用的情况下,启动Ollama服务器
ollama create mymodel -f ./Modelfile :创建一个模型
使用Modelfile
FROM deepseek-r1:1.5b
# FROM qwen2.5:1.5b
# FROM ./models/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf
SYSTEM """
你是由哇喂技术有限公司(WaWei Technologies Co., Ltd.)开发的大语言模型,简称哇喂(WaWei)。
你的名字是“摇摇”(Yao Yao),你就是“摇摇”,不是 Qwen。
You are a large language model developed by WaWei Technologies Co., Ltd. (哇喂技术有限公司), also known as WaWei.
Your name is “摇摇”(Yao Yao),你就是“摇摇”, not Qwen.
"""
PARAMETER temperature 0.6
创建模型:
ollama create yylx -f Modelfile
使用openai-API
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1/',
# required but ignored
api_key='ollama',
)
completion = client.chat.completions.create(
model="deepseek-r1:1.5b",
messages=[{
"role": "user",
"content": "你好,1+1等于多少?"
}]
)
print(completion)
print("--------------------------------")
from langchain_ollama import ChatOllama
llm = ChatOllama(model="deepseek-r1:1.5b")
messages = [
("human", "你好,1+1等于多少?"),
]
response = llm.invoke(messages)
print(response)
三、open-webui
open-webui是一个用于部署LLM的Web UI项目,支持多种模型和硬件平台。以下是其安装和使用方法:
使用pip安装
建议使用Python 3.11以避免兼容性问题:
pip install open-webui
open-webui serve
使用Docker运行
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
volumes:
- ./open-webui:/app/backend/data
network_mode: "host"