English | 中文 ShareLMAPI 是一個本地語言模型共享 API,使用 FastAPI 提供接口,允許不同的程序或不同的設備共享同一個本地模型,從而減少資源消耗。並支援流式生成和多種模型配置方法。
- 支援多種模型加載方法:默認、BitsAndBytes 量化、PEFT
- 支援流式和非流式文本生成
- 支援對話歷史和系統提示
- 易於配置和擴展
- 靈活的模型服務器 URL 配置
git clone https://github.com/starpig1129/ShareLMAPI.git
cd ShareLMAPI
可以使用 Conda 或 Pip 安裝依賴。
使用 Conda:
conda env create -f environment.yml
conda activate ShareLMAPI
使用 Pip:
pip install -r requirements.txt
如果您預計在本地使用,請使用以下命令安裝:
pip install -e .
- 導航到
configs
目錄並打開model_config.yaml
。 - 根據您的需求修改配置。您可以指定:
- 模型名稱
- 加載方法(default、bitsandbytes 或 peft)
- 設備(CPU 或 CUDA)
- 其他特定於模型的設置
- 模型服務器 URL
配置示例:
model:
name: "gpt-2"
loading_method: "default"
default:
device: "cuda"
bitsandbytes:
device: "cuda"
quantization_config:
quant_type: "nf4"
load_in_4bit: True
bnb_4bit_quant_type: "nf4"
bnb_4bit_compute_dtype: "float16"
bnb_4bit_use_double_quant: False
peft:
device: "cuda"
peft_type: "lora"
peft_config:
r: 8
lora_alpha: 16
lora_dropout: 0.1
target_modules: ["q_proj", "v_proj"]
model_server:
model_server_url: "http://localhost:5000"
首先,啟動模型服務器以加載和管理語言模型:
uvicorn ShareLMAPI.server.model_server:app --host 0.0.0.0 --port 5000
模型服務器運行後,啟動前端服務器來處理客戶端請求:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker ShareLMAPI.server.server:app --bind 0.0.0.0:8000
如果您想使用 Docker 來運行 ShareLMAPI,請按照以下步驟操作:
在含有 Dockerfile 的目錄中運行以下命令來構建 Docker 鏡像:
docker-compose build
這將創建一個名為 sharelmapi
的 Docker 鏡像。
構建完成後,使用以下命令來運行容器:
docker-compose up
這將啟動容器,並將容器內的 5000 和 8000 端口映射到主機的相應端口。
現在,您可以通過 http://localhost:8000
訪問 API,就像非 Docker 環境中一樣。
- 確保您的
model_config.yaml
文件中的模型設置適合在 Docker 環境中運行。 - 如果您需要持久化數據或配置,考慮使用 Docker 卷。
- 對於大型模型,確保您的 Docker 主機有足夠的資源(特別是 GPU)。
生成模型回應並流式傳輸結果。
- 方法:
POST
- URL:
http://localhost:8000/generate_stream
- 參數:
dialogue_history
:對話消息列表(可選)prompt
:用戶輸入提示(如果未提供對話歷史)max_length
:生成的最大 token 數量temperature
:控制生成隨機性的參數generation_kwargs
:其他生成參數(可選)
生成模型回應,不使用流式傳輸。
- 方法:
POST
- URL:
http://localhost:8000/generate
- 參數:與
/generate_stream
相同
pip install ShareLMAPI
以下是使用 ShareLMAPI
調用 API 的示例:
from ShareLMAPI.client import ShareLMAPIClient
# 創建 API 客戶端
client = ShareLMAPIClient(base_url="http://localhost:8000")
# 流式生成
for chunk in client.generate_text("從前有一個", max_length=50, streamer=True):
print(chunk, end='', flush=True)
# 非流式生成
response = client.generate_text("法國的首都是什麼?", max_length=50, streamer=False)
print(response)
# 使用對話歷史
dialogue_history = [
{"role": "user", "content": "你好,你是誰?"},
{"role": "assistant", "content": "我是一個 AI 助手。今天我能為您做些什麼?"},
{"role": "user", "content": "你能解釋一下量子計算嗎?"}
]
response = client.generate_text(dialogue_history=dialogue_history, max_length=200, streamer=False)
print(response)
在項目根目錄中運行以下命令來執行測試:
pytest -s tests/test_client.py
這將運行測試並顯示輸出結果。
歡迎任何形式的貢獻。請遵循以下步驟:
- Fork 此存儲庫
- 創建您的功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m 'Add some AmazingFeature'
) - 推送到分支(
git push origin feature/AmazingFeature
) - 開啟一個 Pull Request
功能 | ShareLMAPI | oLLama |
---|---|---|
模型專注 | 支援多種模型 (如 transformers 與 PEFT ) |
主要專注於 LLaMA 模型及其變體 |
權重共享 | 支援,模型可通過 API 在多個應用程式間共享,減少資源使用 | 不支援,通常是運行單個模型實例 |
API 架構 | 以 API 為核心,採用伺服器-客戶端架構,模型設置靈活 | 更偏向於推理,API 自訂功能較少 |
模型加載 | 支援自適應加載、BitsAndBytes 及 PEFT 進行效率提升 | 針對本地硬體進行優化以運行 LLaMA 模型 |
流式輸出 | 支援流式輸出,適用於即時生成 | 主要專注於批次推理 |
多服務支援 | 設計用於在多個服務和應用程式中共享模型 | 主要用於單一實例模型運行 |
自訂化 | 高度可自訂,允許動態調整 max_length 、temperature 以及其他生成參數 |
API 自訂化功能較少,針對 LLaMA 調整 |
目標使用者 | 適用於構建多服務或資源優化應用程式的開發者 | 適用於本地使用 LLaMA 模型的研究人員及開發者 |
部署 | 支援多種環境(如 Conda、Docker)以便於無縫部署及整合 | 主要專注於在本地部署 LLaMA 模型 |
使用情境 | 適用於多客戶端與集中式語言模型進行互動,資源共享 | 主要用於本地運行 LLaMA 模型 |
本項目基於 MIT 許可證開源。詳情請參見 LICENSE 文件。
這裡是我的其他一些值得注意的專案:
PigPig:先進的多模態 LLM Discord 機器人: 這是一個基於多模態大型語言模型(LLM)的強大 Discord 機器人,旨在通過自然語言與用戶互動。 它結合了先進的 AI 功能和實用的特性,為 Discord 社群提供了豐富的使用體驗。
- GitHub: ai-discord-bot-PigPig
AI-data-analysis-MulitAgent: 這是一個由 AI 驅動的研究助理系統,利用多個專門代理來幫助完成數據分析、視覺化和報告生成等任務。該系統使用 LangChain、OpenAI 的 GPT 模型和 LangGraph 來處理複雜的研究流程,整合了多樣化的 AI 架構以達到最佳性能。
- GitHub: ai-data-analysis-MulitAgent