大模型部署框架Ollama和vLLM怎么選?一文講透兩大框架的優(yōu)缺點(diǎn)和適用場景 原創(chuàng)
Ollama
在人工智能技術(shù)迅猛發(fā)展的今天,大型語言模型(LLM)的應(yīng)用越來越廣泛。Ollama作為一款創(chuàng)新的開源框架,為開發(fā)者和研究者提供了在本地環(huán)境高效部署和運(yùn)行LLM的全新解決方案。
跨平臺安裝指南
Ollama支持主流操作系統(tǒng),安裝過程極為簡便:
? Linux用戶可通過終端一鍵安裝:
wget -O - https://setup.ollama.ai | bash
? macOS用戶推薦使用Homebrew:
brew tap ollama/ollama && brew install
? Windows用戶可通過WSL輕松部署
模型快速啟動示例
啟動預(yù)訓(xùn)練模型僅需簡單指令:
ollama start qwen2.5-14b --detail
添加--detail參數(shù)可實(shí)時監(jiān)控token生成速率,便于性能調(diào)優(yōu)。
個性化模型配置
我們可以通過Modelfile可實(shí)現(xiàn)深度定制,比如新建下面一個文件:
BASE qwen2.5-14b
# 模型參數(shù)設(shè)置
SET temperature 0.7
SET context_length 16384
SET max_tokens 8192
# 角色定義
DEFINE ROLE "您是一位專業(yè)的技術(shù)顧問"
構(gòu)建自定義模型流程:
ollama build custom-model -c config.mod
ollama activate custom-model --detail
交互方式
- 原生API接口調(diào)用示例:
import requests
response = requests.post('http://<my_ollama_server_ip>:11434/api/chat',
json={
'model': 'qwen2.5:14b',
'messages': [
{
'role': 'system',
'content': 'You are a helpful AI assistant.'
},
{
'role': 'user',
'content': 'What is AI Agent?'
}
],
'stream': False
}
)
print(response.json()['message']['content'])
2.兼容OpenAI接口的Python實(shí)現(xiàn):
from openai import OpenAI
client = OpenAI(
base_url="http://<my_ollama_server_ip>:11434/v1",
api_key="xx"# 可設(shè)成任意字符串
)
response = client.chat.completions.create(
model="qwen2.5:14b",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is AI Agent?"}
]
)
print(response.choices[0].message.content)
核心功能亮點(diǎn)
- 實(shí)時Token生成特性:我們的系統(tǒng)支持生成即時token,與OpenAI API完全兼容,非常適合用于開發(fā)響應(yīng)式應(yīng)用。
- 并行模型運(yùn)行:我們的系統(tǒng)可以同時操作多個模型,但需要注意一點(diǎn)。當(dāng)VRAM資源有限時,Ollama會關(guān)閉一個模型以啟動另一個,所以合理規(guī)劃資源至關(guān)重要。
- 高度定制化設(shè)定:通過API調(diào)用,我們可以進(jìn)行各種自定義設(shè)置,盡管這提供了極大的靈活性,但對初學(xué)者和用于生產(chǎn)環(huán)境的服務(wù)器可能不是那么友好。
- CPU兼容和智能資源管理:如果VRAM資源不足,我們的系統(tǒng)可以智能地將模型轉(zhuǎn)移到CPU上執(zhí)行,這使得在GPU內(nèi)存受限的系統(tǒng)上也能夠運(yùn)行大型模型服務(wù)。
- 編程語言無關(guān):你可以自由選擇Python、JavaScript、Go等編程語言,或者任何具有HTTP功能的編程語言進(jìn)行開發(fā)。
vLLM
在深度學(xué)習(xí)推理領(lǐng)域,vLLM框架憑借其卓越的性能表現(xiàn)脫穎而出。作為基于PyTorch構(gòu)建的專用解決方案,該框架深度融合CUDA加速技術(shù),通過創(chuàng)新性的連續(xù)批處理機(jī)制、智能內(nèi)存分配策略以及分布式張量計算能力,為大規(guī)模語言模型部署提供了工業(yè)級的高效運(yùn)行環(huán)境。
相較于Ollama這類簡易工具,vLLM更適合采用容器化部署方案。Docker的標(biāo)準(zhǔn)化環(huán)境封裝特性能夠有效解決跨平臺兼容性問題。部署前需確保滿足以下技術(shù)要求:
- Docker運(yùn)行環(huán)境已正確配置
- NVIDIA容器運(yùn)行時支持已安裝
- 16GB及以上物理內(nèi)存容量
- 配備充足顯存的NVIDIA顯卡
下載模型
以下演示如何在容器環(huán)境中部署Qwen2.5-14B模型:
首先建立模型存儲目錄并獲取量化模型:
mkdir -p model_repository/Qwen2.5-14B/
curl -L https://huggingface.co/lmstudio-community/Qwen2.5-14B-Instruct-GGUF/resolve/main/Qwen2.5-14B-Instruct-Q4_K_M.gguf \
-o model_repository/Qwen2.5-14B/model.gguf
除了使用curl 命令下載模型,也可以通過腳本下載:
export HF_ENDPOINT=https://hf-mirror.com
pip install modelscope
使用modelscope下載并緩存到/usr/local,模型地址可以改成你想要下載的
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
from modelscope.hub.api import HubApi
api = HubApi()
# 有的地方需要,key在 modelscope.cn/models 右上角個人那邊
# api.login('xxx你的賬號對應(yīng)的key')
model_dir = snapshot_download('Qwen/Qwen2.5-72B-Instruct-AWQ', cache_dir='/usr/local',revision='master')
print(model_dir)
啟動模型
我們還需要設(shè)置 generation_ config.son 文件, 為了測試方便,這里設(shè)置temperature = 0。
{
"bos_token_id": 151643,
"pad_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"repetition_penalty": 1.05,
"temperature": 0.0,
"top_p": 0.8,
"top_k": 20,
"transformers_version": "4.37.0"
}
因此,需要創(chuàng)建一個文件夾,其中包含這個 JSON 文件,并確保它的名稱為 generation_ config. json。然后,使用多個參數(shù)運(yùn)行 docker 容器:
# 需要GPU支持
docker run -it \
--runtime nvidia \
--gpus all \
--network="host" \
--ipc=host \
-v ./models:/vllm-workspace/models \
-v ./config:/vllm-workspace/config \
vllm/vllm-openai:latest \
--model models/Qwen2.5-14B-Instruct/Qwen2.5-14B-Instruct-Q4_K_M.gguf \
--tokenizer Qwen/Qwen2.5-14B-Instruct \
--host "0.0.0.0" \
--port 5000 \
--gpu-memory-utilization 1.0 \
--served-model-name "VLLMQwen2.5-14B" \
--max-num-batched-tokens 8192 \
--max-num-seqs 256 \
--max-model-len 8192 \
--generation-config config
這些參數(shù)的含義如下:
--runtime nvidia --gpus all: 啟用對容器的 NVIDIA GPU 支持。
--network="host": 使用主機(jī)網(wǎng)絡(luò)模式以獲得更好的性能。
--ipc=host: 允許主機(jī)和容器之間共享內(nèi)存。
- v ./model:/vllm-workspace/model: 將本地模型目錄裝入容器,目錄包含了示例的Qwen2.5–14B模型
--model: 指定 GGUF 模型文件的路徑。
--tokenizer: 定義要使用的 HuggingFace tokenizer。
--gpu-memory-utilization 1: 將 GPU 內(nèi)存使用率設(shè)置為 100% 。
--served-model-name: 通過 API 提供服務(wù)時模型的自定義名稱,可以指定所需的名稱。
--max-num-batched-tokens: 批處理中的最大token數(shù)量。
--max-num-seqs: 同時處理的序列的最大數(shù)目。
--max-model-len: 模型的最大上下文長度。
交互方式
- 原生API接口調(diào)用示例:
import requests
response = requests.post('http://192.168.123.23:5000/v1/chat/completions',
json={
'model': 'VLLMQwen2.5-14B',
'messages': [
{
'role': 'system',
'content': 'You are a helpful AI assistant.'
},
{
'role': 'user',
'content': 'What is artificial intelligence?'
}
],
'stream': False
}
)
print(response.json()['choices'][0]['message']['content'])
2.兼容OpenAI接口的Python實(shí)現(xiàn):
from openai import OpenAI
client = OpenAI(
base_url="http://<my_vLLM_server_ip>:5000/v1",
api_key="xx"
)
response = client.chat.completions.create(
model="VLLMQwen2.5-14B",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is AI Agent?"}
]
)
print(response.choices[0].message.content)
核心功能亮點(diǎn)
vLLM被專門設(shè)計用于高性能推理和生產(chǎn)環(huán)境,其主要特點(diǎn)包括:
- 優(yōu)化的GPU效能:通過CUDA和PyTorch的配合使用,我們充分發(fā)揮了GPU的潛力,從而實(shí)現(xiàn)更迅速的推理過程。
- 批處理功能:我們實(shí)現(xiàn)了連續(xù)的批處理和高效的內(nèi)存管理,以此來提升多個并行請求的吞吐量。
- 安全性:內(nèi)建API密鑰支持和正確的請求驗(yàn)證機(jī)制,而不是直接忽視身份驗(yàn)證。
- 靈活的部署方式:全面支持Docker,可以對GPU內(nèi)存使用和模型參數(shù)進(jìn)行精細(xì)控制。
Ollama vs vLLM
- 性能表現(xiàn):基準(zhǔn)測試顯示vLLM具有明顯的速度優(yōu)勢,單請求處理時token生成速率較Ollama提升超過15%(實(shí)測數(shù)據(jù):vLLM 29 token/s vs Ollama 25 token/s)
- 并發(fā)處理能力:vLLM采用先進(jìn)的資源調(diào)度算法,可高效處理高并發(fā)請求;而Ollama在并行請求處理方面存在架構(gòu)限制,即使少量并發(fā)請求(如4個)也會導(dǎo)致系統(tǒng)資源爭用問題。
- 開發(fā)便捷性:Ollama憑借極簡的交互設(shè)計脫穎而出,開發(fā)者通過單行命令即可實(shí)現(xiàn)模型交互;相較之下,vLLM需要掌握容器化部署技術(shù),并需理解各類性能調(diào)優(yōu)參數(shù)。
- 生產(chǎn)就緒度:vLLM的工業(yè)級特性使其成為企業(yè)級部署的首選,包括多家知名AI服務(wù)商在內(nèi)的技術(shù)團(tuán)隊都采用其作為核心推理引擎。該框架支持細(xì)粒度的資源分配和彈性擴(kuò)展,完美適配云原生環(huán)境。
- 安全機(jī)制:vLLM內(nèi)置完善的認(rèn)證體系,支持基于token的訪問控制;而Ollama默認(rèn)采用開放式訪問模式,需要額外配置網(wǎng)絡(luò)層防護(hù)措施來保證服務(wù)安全。
- 技術(shù)支持體系:Ollama的文檔注重快速上手體驗(yàn),但技術(shù)實(shí)現(xiàn)細(xì)節(jié)相對匱乏,社區(qū)論壇中的關(guān)鍵技術(shù)問題經(jīng)常得不到有效解答。vLLM則建立了立體化的技術(shù)支持體系,包括:
- 詳盡的API規(guī)范文檔
- 性能調(diào)優(yōu)白皮書
- 活躍的開發(fā)者社區(qū)
- 專門的技術(shù)門戶網(wǎng)站
對比維度 | Ollama | vLLM |
核心定位 | 輕量級本地大模型運(yùn)行工具(適合個人開發(fā)/實(shí)驗(yàn)) | 生產(chǎn)級大模型推理框架(適合企業(yè)/高并發(fā)場景) |
部署難度 | 簡單:一鍵安裝,支持 Mac/Linux/Windows(WSL) | 較復(fù)雜:依賴 Python 環(huán)境,需手動配置 GPU 驅(qū)動和 CUDA |
硬件要求 | 低:CPU 可用(推薦 16GB+ 內(nèi)存),可選 GPU 加速 | 高:必須 NVIDIA GPU(顯存越大越好),依賴 CUDA 計算 |
模型支持 | 內(nèi)置主流開源模型(Llama2、Mistral、DeepSeek 等),自動下載預(yù)訓(xùn)練模型 | 支持 HuggingFace 格式模型,需手動下載和轉(zhuǎn)換模型文件 |
運(yùn)行性能 | 中等:適合單次問答、小規(guī)模交互 | 極高:優(yōu)化了顯存管理和批處理,支持千級別并發(fā)請求 |
使用場景 | 個人學(xué)習(xí)、本地測試、快速原型開發(fā) | 企業(yè)級 API 服務(wù)、高并發(fā)推理、云端部署 |
交互方式 | 命令行直接對話,支持類似 ChatGPT 的交互界面 | 需通過 API 調(diào)用(OpenAI 兼容接口),無內(nèi)置對話界面 |
資源占用 | 靈活:可調(diào)整 CPU/內(nèi)存占用,適合低配電腦 | 固定:顯存占用量大,需預(yù)留資源應(yīng)對峰值負(fù)載 |
擴(kuò)展性 | 有限:專注于單機(jī)本地化運(yùn)行 | 強(qiáng):支持分布式部署、動態(tài)批處理、多 GPU 并行 |
新手友好度 | 極高:開箱即用,無需代碼基礎(chǔ) | 中等:需了解 Python 和 API 開發(fā)基礎(chǔ) |
社區(qū)支持 | 活躍的開發(fā)者社區(qū),文檔清晰 | 學(xué)術(shù)團(tuán)隊維護(hù),更新頻繁但偏向技術(shù)文檔 |
典型用途 | 寫代碼、翻譯、文案生成等個人任務(wù) | 構(gòu)建智能客服、批量文檔處理、AI 賦能業(yè)務(wù)系統(tǒng) |
總結(jié)
如果你想在本地或遠(yuǎn)程服務(wù)器上快速試驗(yàn)大模型,Ollama是理想之選,其易用性讓初次使用大型語言模型的開發(fā)者能平滑入門。而對于注重性能、可擴(kuò)展性和資源優(yōu)化的生產(chǎn)環(huán)境,vLLM表現(xiàn)出色,高效處理并行請求和優(yōu)化GPU利用,且文檔完備,使其成為生產(chǎn)環(huán)境大規(guī)模部署的強(qiáng)力候選者,尤其在充分挖掘硬件性能方面。
本文轉(zhuǎn)載自公眾號AI 博物院 作者:longyunfeigu
原文鏈接:??https://mp.weixin.qq.com/s/l7fZUFuNwiEqJhuUZGZrQw??
