Xinference實戰指南:全面解析LLM大模型部署流程,攜手Dify打造高效AI應用實踐案例,加速AI專案落地程序

汀、人工智能發表於2024-08-16

Xinference實戰指南:全面解析LLM大模型部署流程,攜手Dify打造高效AI應用實踐案例,加速AI專案落地程序

Xorbits Inference (Xinference) 是一個開源平臺,用於簡化各種 AI 模型的執行和整合。藉助 Xinference,您可以使用任何開源 LLM、嵌入模型和多模態模型在雲端或本地環境中執行推理,並建立強大的 AI 應用。透過 Xorbits Inference,可以輕鬆地一鍵部署你自己的模型或內建的前沿開源模型

  • 官網:https://xorbits.cn/inference
  • github:https://github.com/xorbitsai/inference/tree/main
  • 官方手冊:https://inference.readthedocs.io/zh-cn/latest/index.html

  • Xinference功能特點:
    • 模型推理:大語言模型,語音識別模型,多模態模型的部署流程被大大簡化。一個命令即可完成模型的部署工作。
    • 前沿模型:框架內建眾多中英文的前沿大語言模型,包括 baichuan,chatglm2 等,一鍵即可體驗!內建模型列表還在快速更新中!
    • 異構硬體:透過 ggml,同時使用你的 GPU 與 CPU 進行推理,降低延遲,提高吞吐!
    • 介面呼叫:提供多種使用模型的介面,包括 OpenAI 相容的 RESTful API(包括 Function Calling),RPC,命令列,web UI 等等。方便模型的管理與互動。
    • 叢集計算,分佈協同: 支援分散式部署,透過內建的資源排程器,讓不同大小的模型按需排程到不同機器,充分使用叢集資源。
    • 開放生態,無縫對接: 與流行的三方庫無縫對接,包括 LangChain,LlamaIndex,Dify、FastGPT、RAGFlow、Chatbox。

1. 模型支援

1.1 大模型支援

參考連結:https://inference.readthedocs.io/zh-cn/latest/models/builtin/llm/index.html

所有主流模型都相容支援

1.2 嵌入模型

參考連結:https://inference.readthedocs.io/zh-cn/latest/models/builtin/embedding/index.html

開源的詞嵌入模型也都支援

  • BAAI-bge-large-zh-v1.5
    BAAI Embedding語義向量微調參考連結

1.3 重排序模型(Reranker)

參考連結:https://inference.readthedocs.io/zh-cn/latest/models/builtin/rerank/index.html

  • bge-reranker-large
    BAAI Cross-Encoder語義向量微調參考連結

1.4 IMAGE 模型

Xinference 還支援影像模型,使用影像模型可以實現文生圖、圖生圖等功能。Xinference 內建了幾種影像模型,分別是 Stable Diffusion(SD)的各個版本。部署方式和文字模型類似,都是在 WebGUI 介面上啟動模型即可,無需進行引數選擇,但因為 SD 模型比較大,在部署影像模型前請確保伺服器上有 50GB 以上的空間。

1.5 CUSTOM 模型

語音模型是 Xinference 最近新增的功能,使用語音模型可以實現語音轉文字、語音翻譯等功能。在部署語音模型之前,需要先安裝ffmpeg元件,以 Ubuntu 作業系統為例,安裝命令如下:

sudo apt update && sudo apt install ffmpeg

1.6 模型來源

Xinference 預設是從 HuggingFace 上下載模型,如果需要使用其他網站下載模型,可以透過設定環境變數XINFERENCE_MODEL_SRC來實現,使用以下程式碼啟動 Xinference 服務後,部署模型時會從 Modelscope[5] 上下載模型:

XINFERENCE_MODEL_SRC=modelscope xinference-local

1.7 模型獨佔 GPU

在 Xinference 部署模型的過程中,如果你的伺服器只有一個 GPU,那麼你只能部署一個 LLM 模型或多模態模型或影像模型或語音模型,因為目前 Xinference 在部署這幾種模型時只實現了一個模型獨佔一個 GPU 的方式,如果你想在一個 GPU 上同時部署多個以上模型,就會遇到這個錯誤:No available slot found for the model。

1.8 管理模型

除了啟動模型,Xinference 提供了管理模型整個生命週期的能力。同樣的,你可以使用命令列:

列出所有 Xinference 支援的指定型別的模型:
	xinference registrations -t LLM
列出所有在執行的模型:
	xinference list
停止某個正在執行的模型:
	xinference terminate --model-uid "qwen2"

更多內容參考3.1節

2. Xinference 安裝

安裝 Xinference 用於推理的基礎依賴,以及支援用 ggml推理 和 PyTorch推理的依賴。

2.1 Xinference 本地原始碼安裝

首先我們需要準備一個 3.9 以上的 Python 環境執行來 Xinference,建議先根據 conda 官網文件安裝 conda。 然後使用以下命令來建立 3.11 的 Python 環境:

conda create --name xinference python=3.11
conda activate xinference 

以下兩條命令在安裝 Xinference 時,將安裝 Transformers 和 vLLM 作為 Xinference 的推理引擎後端:

pip install "xinference"
pip install "xinference[ggml]"
pip install "xinference[pytorch]"

#安裝xinference所有包
pip install "xinference[all]"


pip install "xinference[transformers]" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "xinference[vllm]" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "xinference[transformers,vllm]" # 同時安裝
#或者一次安裝所有的推理後端引擎
pip install "xinference[all]"  -i https://pypi.tuna.tsinghua.edu.cn/simple

如果你想使用 GGML 格式的模型,建議根據當前使用的硬體手動安裝所需要的依賴,以充分利用硬體的加速能力。
在 Xinference 安裝過程中,有可能會安裝 PyTorch 的其他版本(其依賴的 vllm[3] 元件需要安裝),從而導致 GPU 伺服器無法正常使用,因此在安裝完 Xinference 之後,可以執行以下命令看 PyTorch 是否正常:

python -c "import torch; print(torch.cuda.is_available())"

如果輸出結果為True,則表示 PyTorch 正常,否則需要重新安裝 PyTorch。

2.1.1 llama-cpp-python安裝

 ERROR: Failed building wheel for llama-cpp-python
Failed to build llama-cpp-python
ERROR: Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based projects

錯誤原因:使用pip install llama-cpp-python安裝時,是透過下載原始碼編譯安裝的(llama_cpp_python-0.2.55.tar.gz (36.8 MB))。這時候如果系統沒有相應的cmake 和 gcc版本,會彈出這個錯誤。

根據系統選擇官方編譯後的whl下載進行離線安裝。

  • 網址:https://github.com/abetlen/llama-cpp-python/releases

參考連結:告別卡頓,暢享GitHub:國內開發者必看的五大加速訪問與下載技巧

找一個加速器就好

wget https://git.886.be/https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.88-cu122/llama_cpp_python-0.2.88-cp311-cp311-linux_x86_64.whl
  • 安裝命令例子
 pip install llama_cpp_python-0.2.88-cp311-cp311-linux_x86_64.whl

2.2 Docker安裝xinference

參考連結:Docker 映象安裝官方手冊

當前,可以透過兩個渠道拉取 Xinference 的官方映象。

  1. 在 Dockerhub 的 xprobe/xinference 倉庫裡。
  2. Dockerhub 中的映象會同步上傳一份到阿里雲公共映象倉庫中,供訪問 Dockerhub 有困難的使用者拉取。拉取命令:docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:<tag> 。目前可用的標籤包括:
    • nightly-main: 這個映象會每天從 GitHub main 分支更新制作,不保證穩定可靠。
    • v<release version>: 這個映象會在 Xinference 每次釋出的時候製作,通常可以認為是穩定可靠的。
    • latest: 這個映象會在 Xinference 釋出時指向最新的釋出版本
    • 對於 CPU 版本,增加 -cpu 字尾,如 nightly-main-cpu。

Nvidia GPU 使用者可以使用Xinference Docker 映象 啟動 Xinference 伺服器。在執行安裝命令之前,確保系統中已經安裝了 Docker 和 CUDA。你可以使用如下方式在容器內啟動 Xinference,同時將 9997 埠對映到宿主機的 9998 埠,並且指定日誌級別為 DEBUG,也可以指定需要的環境變數。

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0 --log-level debug

需要修改<your_version>為實際使用版本,也可以為latest:

docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0 --log-level debug
  • --gpus 必須指定,正如前文描述,映象必須執行在有 GPU 的機器上,否則會出現錯誤。
  • -H 0.0.0.0 也是必須指定的,否則在容器外無法連線到 Xinference 服務。
  • 可以指定多個 -e 選項賦值多個環境變數。

2.2.2 掛載模型目錄

預設情況下,映象中不包含任何模型檔案,使用過程中會在容器內下載模型。如果需要使用已經下載好的模型,需要將宿主機的目錄掛載到容器內。這種情況下,需要在執行容器時指定本地卷,並且為 Xinference 配置環境變數。

docker run -v </on/your/host>:</on/the/container> -e XINFERENCE_HOME=</on/the/container> -p 9998:9997 --gpus all xprobe/xinference:v<your_version> xinference-local -H 0.0.0.0

上述命令的原理是將主機上指定的目錄掛載到容器中,並設定 XINFERENCE_HOME 環境變數指向容器內的該目錄。這樣,所有下載的模型檔案將儲存在您在主機上指定的目錄中。您無需擔心在 Docker 容器停止時丟失這些檔案,下次執行容器時,您可以直接使用現有的模型,無需重複下載。

如果你在宿主機使用的預設路徑下載的模型,由於 xinference cache 目錄是用的軟鏈的方式儲存模型,需要將原檔案所在的目錄也掛載到容器內。例如你使用 huggingface 和 modelscope 作為模型倉庫,那麼需要將這兩個對應的目錄掛載到容器內,一般對應的 cache 目錄分別在 <home_path>/.cache/huggingface 和 <home_path>/.cache/modelscope,使用的命令如下:

docker run \
  -v </your/home/path>/.xinference:/root/.xinference \
  -v </your/home/path>/.cache/huggingface:/root/.cache/huggingface \
  -v </your/home/path>/.cache/modelscope:/root/.cache/modelscope \
  -p 9997:9997 \
  --gpus all \
  xprobe/xinference:v<your_version> \
  xinference-local -H 0.0.0.0

3.啟動xinference 服務(UI)

Xinference 預設會在本地啟動服務,埠預設為 9997。因為這裡配置了-H 0.0.0.0引數,非本地客戶端也可以透過機器的 IP 地址來訪問 Xinference 服務。

xinference-local --host 0.0.0.0 --port 7861
  • 啟動輸出結果

2024-08-14 15:37:36,771 xinference.core.supervisor 1739661 INFO     Xinference supervisor 0.0.0.0:62536 started
2024-08-14 15:37:36,901 xinference.core.worker 1739661 INFO     Starting metrics export server at 0.0.0.0:None
2024-08-14 15:37:36,903 xinference.core.worker 1739661 INFO     Checking metrics export server...
2024-08-14 15:37:39,192 xinference.core.worker 1739661 INFO     Metrics server is started at: http://0.0.0.0:33423
2024-08-14 15:37:39,193 xinference.core.worker 1739661 INFO     Purge cache directory: /root/.xinference/cache
2024-08-14 15:37:39,194 xinference.core.worker 1739661 INFO     Connected to supervisor as a fresh worker
2024-08-14 15:37:39,205 xinference.core.worker 1739661 INFO     Xinference worker 0.0.0.0:62536 started
2024-08-14 15:37:43,454 xinference.api.restful_api 1739585 INFO     Starting Xinference at endpoint: http://0.0.0.0:8501
2024-08-14 15:37:43,597 uvicorn.error 1739585 INFO     Uvicorn running on http://0.0.0.0:8501 (Press CTRL+C to quit)

3.1 模型下載

vLLM 引擎

vLLM 是一個支援高併發的高效能大模型推理引擎。當滿足以下條件時,Xinference 會自動選擇 vllm 作為引擎來達到更高的吞吐量:

  • 模型格式為 pytorchgptq 或者 awq
  • 當模型格式為 pytorch 時,量化選項需為 none
  • 當模型格式為 awq 時,量化選項需為 Int4
  • 當模型格式為 gptq 時,量化選項需為 Int3Int4 或者 Int8
  • 作業系統為 Linux 並且至少有一個支援 CUDA 的裝置
  • 自定義模型的 model_family 欄位和內建模型的 model_name 欄位在 vLLM 的支援列表中。

Llama.cpp 引擎

Xinference 透過 llama-cpp-python 支援 ggufggml 格式的模型。建議根據當前使用的硬體手動安裝依賴,從而獲得最佳的加速效果。

不同硬體的安裝方式:

  • Apple M 系列

    CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python
    
    
  • 英偉達顯示卡:

    CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python
    
    
  • AMD 顯示卡:

    CMAKE_ARGS="-DLLAMA_HIPBLAS=on" pip install llama-cpp-python
    
    

SGLang 引擎

SGLang 具有基於 RadixAttention 的高效能推理執行時。它透過在多個呼叫之間自動重用 KV 快取,顯著加速了複雜 LLM 程式的執行。它還支援其他常見推理技術,如連續批處理和張量並行處理。

初始步驟:

pip install 'xinference[sglang]'

3.2 模型部署

在部署 LLM 模型時有以下引數可以進行選擇:

  • Model Format: 模型格式,可以選擇量化和非量化的格式,非量化的格式是 pytorch,量化格式有 ggml、gptq、awq 等

  • Model Size:模型的引數量大小,如果是Llama3 的話,則有 8B、70B 等選項

  • Quantization:量化精度,有 4bit、8bit 等量化精度選擇

  • N-GPU:選擇使用第幾個 GPU

  • Model UID(可選): 模型自定義名稱,不填的話就預設用原始模型名稱

引數填寫完成後,點選左邊的火箭圖示按鈕即開始部署模型,後臺會根據引數選擇下載量化或非量化的 LLM 模型。部署完成後,介面會自動跳轉到 Running Models 選單,在 LANGUAGE MODELS 標籤中,我們可以看到部署好的模型。

3.2.1 flashinfer安裝

參考連結:https://gitcode.com/gh_mirrors/fl/flashinfer/overview?utm_source=artical_gitcode&index=bottom&type=card&webUrl

參考連結:https://docs.flashinfer.ai/installation.html

  • 提供了適用於Linux的預編譯輪子,可以透過以下命令嘗試FlashInfer:
#針對CUDA 12.4及torch 2.4
pip install flashinfer -i https://flashinfer.ai/whl/cu124/torch2.4
#對於其他CUDA和torch版本,請訪問 https://docs.flashinfer.ai/installation.html 檢視詳情
  • 或者你可以從原始碼編譯安裝:
git clone https://github.com/flashinfer-ai/flashinfer.git --recursive
cd flashinfer/python
pip install -e .
  • 若需減小構建和測試時的二進位制大小,可以這樣做:
git clone https://github.com/flashinfer-ai/flashinfer.git --recursive
cd flashinfer/python
#參考 https://pytorch.org/docs/stable/generated/torch.cuda.get_device_capability.html#torch.cuda.get_device_capability
export TORCH_CUDA_ARCH_LIST=8.0
pip install -e .

檢視torch版本:

import torch
print(torch.__version__)
#2.4.0+cu121
  • OS: Linux only
  • Python: 3.8, 3.9, 3.10, 3.11, 3.12
  • PyTorch: 2.2/2.3/2.4 with CUDA 11.8/12.1/12.4 (only for torch 2.4)
    • Use python -c "import torch; print(torch.version.cuda)" to check your PyTorch CUDA version.
  • Supported GPU architectures: sm80, sm86, sm89, sm90 (sm75 / sm70 support is working in progress).
pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/

如果覺得太慢了,就用whl

  • github網址:https://github.com/flashinfer-ai/flashinfer/releases
Downloading https://github.com/flashinfer-ai/flashinfer/releases/download/v0.1.4/flashinfer-0.1.4%2Bcu121torch2.4-cp311-cp311-linux_x86_64.whl (1098.5 MB)

wget https://git.886.be/https://github.com/flashinfer-ai/flashinfer/releases/download/v0.1.4/flashinfer-0.1.4+cu121torch2.4-cp311-cp311-linux_x86_64.whl

pip install flashinfer-0.1.4+cu121torch2.4-cp311-cp311-linux_x86_64.whl
  • 又遇到問題,可能是量化模型不支援問題

嘗試使用qwen2:1.5b遇到一下問題:

Bfloat16 is only supported on GPUs with compute capability of at least 8.0. Your Tesla V100-SXM2-16GB GPU has compute capability 7.0. You can use float16 instead by explicitly setting the`dtype` flag in CLI, for example: --dtype=half
  • GPU的Compute Capability列表:

由此可見Tesla V100的Compute Capability是7.0,也就是不能用Bfloat16進行計算,要對Bfloat16減半轉換為float16,所以執行時的dtype是half或者float16,否則vLLM會報錯。

在國內需要設定環境變數VLLM_USE_MODELSCOPE=True,然後就可以啟動一個vLLM大模型API服務了:

CUDA_VISIBLE_DEVICES=0,1 nohup python -m vllm.entrypoints.openai.api_server --model pooka74/LLaMA3-8B-Chat-Chinese --dtype=half --port 8000 &> ~/logs/vllm.log &
  • 介面修改參考:
    • 命令列就是 --dtype half,介面上 extra +號點選,key是 dtype,值是 half。

  • 檢視GPU資源佔用

3.2.2 分散式部署

分散式場景下,需要在一臺伺服器上部署一個 Xinference supervisor,並在其餘伺服器上分別部署一個 Xinference worker。 具體步驟如下:

(1)啟動 supervisor執行命令
xinference-supervisor -H "${supervisor_host}",替換 ${supervisor_host} 為 supervisor 所在伺服器的實際主機名或 IP 地址。

(2)啟動 workers其餘伺服器執行命令
xinference-worker -e "http://${supervisor_host}:9997"

Xinference 啟動後,將會列印服務的 endpoint。這個 endpoint 用於透過命令列工具或程式設計介面進行模型的管理:

本地部署下,endpoint 預設為 http://localhost:9997

叢集部署下,endpoint 預設為 http://${supervisor_host}:9997。其中 ${supervisor_host} 為 supervisor 所在伺服器的主機名或 IP 地址。

3.3 模型使用

模型下載並啟動後,會自動開啟一個本地網頁,你可以在這裡與模型進行簡單的對話,測試其是否成功執行。

複製標題下方的Model ID,可以在其他LLMops上使用

3.3.1 快速Gradio對話

3.3.2 整合Dify智慧問答

模型部署完畢,在 Dify 中使用接入模型,在 設定 > 模型供應商 > Xinference 中填入:

  • 模型名稱:qwen2-instruct

  • 伺服器 URL:http://<Machine_IP>:7861 替換成您的機器 IP 地址

  • 模型 UID:qwen2-instruct

  • "儲存" 後即可在應用中使用該模型。

Dify 同時支援將 Xinference embed 模型 作為 Embedding 模型使用,只需在配置框中選擇 Embeddings 型別即可。

3.4 自定義模型

參考連結:參考下文

  • 在Xinference上部署自定義大模型

  • 官方手冊-自定義模型

  • Xorbits inference操作實戰

  • 內建模型

xinference registrations --model-type LLM --endpoint "http://127.0.0.1:7861"

Type    Name                         Language                                                      Ability             Is-built-in
------  ---------------------------  ------------------------------------------------------------  ------------------  -------------
LLM     aquila2                      ['zh']                                                        ['generate']        True
LLM     aquila2-chat                 ['zh']                                                        ['chat']            True
LLM     aquila2-chat-16k             ['zh']                                                        ['chat']            True
LLM     baichuan                     ['en', 'zh']                                                  ['generate']        True
LLM     baichuan-2                   ['en', 'zh']                                                  ['generate']        True
LLM     baichuan-2-chat              ['en', 'zh']                                                  ['chat']            True
LLM     baichuan-chat                ['en', 'zh']                                                  ['chat']            True
LLM     c4ai-command-r-v01           ['en', 'fr', 'de', 'es', 'it', 'pt', 'ja', 'ko', 'zh', 'ar']  ['chat']            True
LLM     chatglm                      ['en', 'zh']                                                  ['chat']            True
LLM     chatglm2                     ['en', 'zh']                                                  ['chat']            True
LLM     chatglm2-32k                 ['en', 'zh']                                                  ['chat']            True
LLM     chatglm3                     ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     chatglm3-128k                ['en', 'zh']                                                  ['chat']            True
LLM     chatglm3-32k                 ['en', 'zh']                                                  ['chat']            True
LLM     code-llama                   ['en']                                                        ['generate']        True
LLM     code-llama-instruct          ['en']                                                        ['chat']            True
LLM     code-llama-python            ['en']                                                        ['generate']        True
LLM     codegeex4                    ['en', 'zh']                                                  ['chat']            True
LLM     codeqwen1.5                  ['en', 'zh']                                                  ['generate']        True
LLM     codeqwen1.5-chat             ['en', 'zh']                                                  ['chat']            True
LLM     codeshell                    ['en', 'zh']                                                  ['generate']        True
LLM     codeshell-chat               ['en', 'zh']                                                  ['chat']            True
LLM     codestral-v0.1               ['en']                                                        ['generate']        True
LLM     cogvlm2                      ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     csg-wukong-chat-v0.1         ['en']                                                        ['chat']            True
LLM     deepseek                     ['en', 'zh']                                                  ['generate']        True
LLM     deepseek-chat                ['en', 'zh']                                                  ['chat']            True
LLM     deepseek-coder               ['en', 'zh']                                                  ['generate']        True
LLM     deepseek-coder-instruct      ['en', 'zh']                                                  ['chat']            True
LLM     deepseek-vl-chat             ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     falcon                       ['en']                                                        ['generate']        True
LLM     falcon-instruct              ['en']                                                        ['chat']            True
LLM     gemma-2-it                   ['en']                                                        ['chat']            True
LLM     gemma-it                     ['en']                                                        ['chat']            True
LLM     glaive-coder                 ['en']                                                        ['chat']            True
LLM     glm-4v                       ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     glm4-chat                    ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     glm4-chat-1m                 ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     gorilla-openfunctions-v1     ['en']                                                        ['chat']            True
LLM     gorilla-openfunctions-v2     ['en']                                                        ['chat']            True
LLM     gpt-2                        ['en']                                                        ['generate']        True
LLM     internlm-20b                 ['en', 'zh']                                                  ['generate']        True
LLM     internlm-7b                  ['en', 'zh']                                                  ['generate']        True
LLM     internlm-chat-20b            ['en', 'zh']                                                  ['chat']            True
LLM     internlm-chat-7b             ['en', 'zh']                                                  ['chat']            True
LLM     internlm2-chat               ['en', 'zh']                                                  ['chat']            True
LLM     internlm2.5-chat             ['en', 'zh']                                                  ['chat']            True
LLM     internlm2.5-chat-1m          ['en', 'zh']                                                  ['chat']            True
LLM     internvl-chat                ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     llama-2                      ['en']                                                        ['generate']        True
LLM     llama-2-chat                 ['en']                                                        ['chat']            True
LLM     llama-3                      ['en']                                                        ['generate']        True
LLM     llama-3-instruct             ['en']                                                        ['chat']            True
LLM     llama-3.1                    ['en', 'de', 'fr', 'it', 'pt', 'hi', 'es', 'th']              ['generate']        True
LLM     llama-3.1-instruct           ['en', 'de', 'fr', 'it', 'pt', 'hi', 'es', 'th']              ['chat']            True
LLM     minicpm-2b-dpo-bf16          ['zh']                                                        ['chat']            True
LLM     minicpm-2b-dpo-fp16          ['zh']                                                        ['chat']            True
LLM     minicpm-2b-dpo-fp32          ['zh']                                                        ['chat']            True
LLM     minicpm-2b-sft-bf16          ['zh']                                                        ['chat']            True
LLM     minicpm-2b-sft-fp32          ['zh']                                                        ['chat']            True
LLM     MiniCPM-Llama3-V-2_5         ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     MiniCPM-V-2.6                ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     mistral-instruct-v0.1        ['en']                                                        ['chat']            True
LLM     mistral-instruct-v0.2        ['en']                                                        ['chat']            True
LLM     mistral-instruct-v0.3        ['en']                                                        ['chat']            True
LLM     mistral-large-instruct       ['en', 'fr', 'de', 'es', 'it', 'pt', 'zh', 'ru', 'ja', 'ko']  ['chat']            True
LLM     mistral-nemo-instruct        ['en', 'fr', 'de', 'es', 'it', 'pt', 'zh', 'ru', 'ja']        ['chat']            True
LLM     mistral-v0.1                 ['en']                                                        ['generate']        True
LLM     mixtral-8x22B-instruct-v0.1  ['en', 'fr', 'it', 'de', 'es']                                ['chat']            True
LLM     mixtral-instruct-v0.1        ['en', 'fr', 'it', 'de', 'es']                                ['chat']            True
LLM     mixtral-v0.1                 ['en', 'fr', 'it', 'de', 'es']                                ['generate']        True
LLM     OmniLMM                      ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     OpenBuddy                    ['en']                                                        ['chat']            True
LLM     openhermes-2.5               ['en']                                                        ['chat']            True
LLM     opt                          ['en']                                                        ['generate']        True
LLM     orca                         ['en']                                                        ['chat']            True
LLM     orion-chat                   ['en', 'zh']                                                  ['chat']            True
LLM     orion-chat-rag               ['en', 'zh']                                                  ['chat']            True
LLM     phi-2                        ['en']                                                        ['generate']        True
LLM     phi-3-mini-128k-instruct     ['en']                                                        ['chat']            True
LLM     phi-3-mini-4k-instruct       ['en']                                                        ['chat']            True
LLM     platypus2-70b-instruct       ['en']                                                        ['generate']        True
LLM     qwen-chat                    ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     qwen-vl-chat                 ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     qwen1.5-chat                 ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     qwen1.5-moe-chat             ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     qwen2-instruct               ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     qwen2-moe-instruct           ['en', 'zh']                                                  ['chat', 'tools']   True
LLM     seallm_v2                    ['en', 'zh', 'vi', 'id', 'th', 'ms', 'km', 'lo', 'my', 'tl']  ['generate']        True
LLM     seallm_v2.5                  ['en', 'zh', 'vi', 'id', 'th', 'ms', 'km', 'lo', 'my', 'tl']  ['generate']        True
LLM     Skywork                      ['en', 'zh']                                                  ['generate']        True
LLM     Skywork-Math                 ['en', 'zh']                                                  ['generate']        True
LLM     starchat-beta                ['en']                                                        ['chat']            True
LLM     starcoder                    ['en']                                                        ['generate']        True
LLM     starcoderplus                ['en']                                                        ['generate']        True
LLM     Starling-LM                  ['en', 'zh']                                                  ['chat']            True
LLM     telechat                     ['en', 'zh']                                                  ['chat']            True
LLM     tiny-llama                   ['en']                                                        ['generate']        True
LLM     vicuna-v1.3                  ['en']                                                        ['chat']            True
LLM     vicuna-v1.5                  ['en']                                                        ['chat']            True
LLM     vicuna-v1.5-16k              ['en']                                                        ['chat']            True
LLM     wizardcoder-python-v1.0      ['en']                                                        ['chat']            True
LLM     wizardlm-v1.0                ['en']                                                        ['chat']            True
LLM     wizardmath-v1.0              ['en']                                                        ['chat']            True
LLM     xverse                       ['en', 'zh']                                                  ['generate']        True
LLM     xverse-chat                  ['en', 'zh']                                                  ['chat']            True
LLM     Yi                           ['en', 'zh']                                                  ['generate']        True
LLM     Yi-1.5                       ['en', 'zh']                                                  ['generate']        True
LLM     Yi-1.5-chat                  ['en', 'zh']                                                  ['chat']            True
LLM     Yi-1.5-chat-16k              ['en', 'zh']                                                  ['chat']            True
LLM     Yi-200k                      ['en', 'zh']                                                  ['generate']        True
LLM     Yi-chat                      ['en', 'zh']                                                  ['chat']            True
LLM     yi-vl-chat                   ['en', 'zh']                                                  ['chat', 'vision']  True
LLM     zephyr-7b-alpha              ['en']                                                        ['chat']            True
LLM     zephyr-7b-beta               ['en']                                                        ['chat']            True
  • 透過Web註冊模型

4. 終端命令

上面如果修改了埠,可以根據下面對應的修改埠

#https://hf-mirror.com/ 
export HF_ENDPOINT=https://hf-mirror.com
export XINFERENCE_MODEL_SRC=modelscope
#log快取地址
export XINFERENCE_HOME=/root/autodl-tmp
#埠修改了重新設定環境變數
export XINFERENCE_ENDPOINT=http://0.0.0.0:7863

修改完了就可以對應的啟動相對應的服務,下面是分別啟動chat / embedding / rerank 三種模型的cmd命令, 其他模型命令可以參考xinference主頁。 啟動完了,會返回對應模型的UID(後期在Dify部署會用到)

#部署chatglm3
xinference launch --model-name chatglm3 --size-in-billions 6 --model-format pytorch --quantization 8-bit
#部署 bge-large-zh embedding
xinference launch --model-name bge-large-zh --model-type embedding
#部署 bge-reranker-large rerank
xinference launch --model-name bge-reranker-large --model-type rerank

API呼叫

​ 如果你不滿足於使用 LLM 模型的 Web 介面,你也可以呼叫 API 介面來使用 LLM 模型,其實在 Xinference 服務部署好的時候,WebGUI 介面和 API 介面已經同時準備好了,在瀏覽器中訪問 http://localhost:9997/docs / 就可以看到 API 介面列表。

​ 介面列表中包含了大量的介面,不僅有 LLM 模型的介面,還有其他模型(比如 Embedding 或 Rerank )的介面,而且這些都是相容 OpenAI API 的介面。以 LLM 的聊天功能為例,我們使用 Curl 工具來呼叫其介面,示例如下:

curl -X 'POST' \
  'http://localhost:9997/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "chatglm3",
    "messages": [
      {
        "role": "user",
        "content": "hello"
      }
    ]
  }'

#返回結果
{
  "model": "chatglm3",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! How can I help you today?",
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 29,
    "completion_tokens": 37
  }
}

如果想測試模型是否已經部署到本地,以rerank模型為例可以執行下面這個指令碼, 或者執行

from xinference.client import Client

#url 可以是local的埠 也可以是外接的埠
url = "http://172.19.0.1:6006"
print(url)

client = Client(url)
model_uid = client.launch_model(model_name="bge-reranker-base", model_type="rerank")
model = client.get_model(model_uid)

query = "A man is eating pasta."
corpus = [
    "A man is eating food.",
    "A man is eating a piece of bread.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
    "A woman is playing violin."
]
print(model.rerank(corpus, query))

  • 或者執行檢視已經部署好的模型
xinferencelist

  • 如果需要釋放資源
xinferenceterminate--model-uid"my-llama-2"
  • 需要外網訪問,需要查詢本地IP地址 即 http://<Machine_IP>:<埠port> , 查詢IP地址的方式如下。
#Windows
ipconfig/all

#Linux
hostname -I

5. Xinference官方AI實踐案例

官方連結:https://inference.readthedocs.io/zh-cn/latest/examples/index.html

參考連結:

  • Xinference:本地部署Dify需要的LLM,embedding,rerank大模型
  • Xinference 大模型推理框架部署與應用
  • 在Xinference上部署自定義大模型
  • 官方手冊-自定義模型
  • Xorbits inference操作實戰

相關文章