LLM大模型部署實戰指南:Ollama簡化流程,OpenLLM靈活部署,LocalAI本地最佳化,Dify賦能應用開發

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

LLM大模型部署實戰指南:Ollama簡化流程,OpenLLM靈活部署,LocalAI本地最佳化,Dify賦能應用開發

1. Ollama 部署的本地模型(🔺)

Ollama 是一個開源框架,專為在本地機器上便捷部署和執行大型語言模型(LLM)而設計。,這是 Ollama 的官網地址:https://ollama.com/

  • 以下是其主要特點和功能概述:

    1. 簡化部署:Ollama 目標在於簡化在 Docker 容器中部署大型語言模型的過程,使得非專業使用者也能方便地管理和執行這些複雜的模型。
    2. 輕量級與可擴充套件:作為輕量級框架,Ollama 保持了較小的資源佔用,同時具備良好的可擴充套件性,允許使用者根據需要調整配置以適應不同規模的專案和硬體條件。
    3. API支援:提供了一個簡潔的 API,使得開發者能夠輕鬆建立、執行和管理大型語言模型例項,降低了與模型互動的技術門檻。
    4. 預構建模型庫:包含一系列預先訓練好的大型語言模型,使用者可以直接選用這些模型應用於自己的應用程式,無需從頭訓練或自行尋找模型源

1.1 一鍵安裝

curl: (77) error setting certificate verify locations:CAfile: /data/usr/local/anaconda/ssl/cacert.pemCApath: none
報錯原因: cacert.pem 的定址路徑 CAfile 不對,也就是在該路徑下找不到檔案。

  • 解決方法:
  1. 找到你的 cacert.pem 檔案所在位置 /path/to/cacert.pem。如果你沒有該證書,可以先在 https://curl.se/ca/cacert.pem 下載,儲存在某個目錄中。
  2. 設定環境變數
export CURL_CA_BUNDLE=/path/to/cacert.pem
#將"/path/to/cacert.pem"替換為你的證書檔案的實際路徑。
export CURL_CA_BUNDLE=/www/anaconda3/anaconda3/ssl/cacert.pem
  • 執行下載
curl -fsSL https://ollama.com/install.sh | sh

1.2 手動安裝

ollama中文網:https://ollama.fan/getting-started/linux/

  1. 下載 ollama 二進位制檔案:Ollama 以自包含的二進位制檔案形式分發。將其下載到您的 PATH 中的目錄:
sudo curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama

sudo chmod +x /usr/bin/ollama
  1. 將 Ollama 新增為啟動服務(推薦):為 Ollama 建立一個使用者:
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama

3.在 /etc/systemd/system/ollama.service 中建立一個服務檔案:

#vim ollama.service 

[Unit]

Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
  1. 然後啟動服務:
sudo systemctl daemon-reload
sudo systemctl enable ollama
  1. 啟動 Ollama¶
    使用 systemd 啟動 Ollama:
sudo systemctl start ollama
  1. 更新,檢視日誌
#再次執行
sudo curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama
sudo chmod +x /usr/bin/ollama

#要檢視作為啟動服務執行的 Ollama 的日誌,請執行:
journalctl -u ollama
  1. 步驟7:關閉 Ollama 服務
#關閉ollama服務
service ollama stop

1.3 Linux內網離線安裝Ollama

  1. 檢視伺服器CPU的型號
##檢視Linux系統CPU型號命令,我的伺服器cpu型號是x86_64
lscpu
  1. 步驟2:根據CPU型號下載Ollama安裝包,並儲存到目錄

下載地址: https://github.com/ollama/ollama/releases/

#x86_64 CPU選擇下載ollama-linux-amd64
#aarch64|arm64 CPU選擇下載ollama-linux-arm64

#有網機器下載過來也一樣
wget https://ollama.com/download/ollama-linux-amd64 

下載到離線伺服器上:/usr/bin/ollama ollama就是你下載的ollama-linux-amd64 改名了(mv),其他步驟一致

1.4 修改儲存路徑

Ollama模型預設儲存在:

  • macOS: ~/.ollama/models
  • Linux: /usr/share/ollama/.ollama/models
  • Windows: C:\Users<username>.ollama\models

如果 Ollama 作為 systemd 服務執行,則應使用以下命令設定環境變數systemctl:

  1. 透過呼叫 來編輯 systemd 服務systemctl edit ollama.service。這將開啟一個編輯器。

  2. Environment對於每個環境變數,在部分下新增一行[Service]:

直接在“/etc/systemd/system/ollama.service”增了2行:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:7861"
Environment="OLLAMA_MODELS=/www/algorithm/LLM_model/models"
  1. 儲存並退出。

  2. 重新載入systemd並重新啟動 Ollama:

systemctl daemon-reload 
systemctl restart ollama

參考連結:https://github.com/ollama/ollama/blob/main/docs/faq.md

  1. 使用 systemd 啟動 Ollama:
sudo systemctl start ollama
  1. 終止

終止(ollama載入的大模型將會停止佔用視訊記憶體,此時ollama屬於失聯狀態,部署和執行操作失效,會報錯:

Error: could not connect to ollama app, is it running?需要啟動後,才可以進行部署和執行操作

systemctl stop ollama.service
  • 終止後啟動(啟動後,可以接著使用ollama 部署和執行大模型)
systemctl start ollama.service

1.5 啟動LLM

  • 下載模型
ollama pull llama3.1
ollama pull qwen2

  • 執行大模型
ollama run llama3.1
ollama run qwen2

  • 檢視是否識別到大模型: ollama list, 如果成功, 則會看到大模型
ollama list
NAME            ID              SIZE    MODIFIED    
qwen2:latest    e0d4e1163c58    4.4 GB  3 hours ago
  • 使用該ollama ps命令檢視當前已載入到記憶體中的模型。
NAME            ID              SIZE    PROCESSOR       UNTIL              
qwen2:latest    e0d4e1163c58    5.7 GB  100% GPU        3 minutes from now
  • nvidia-smi檢視
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.86.10              Driver Version: 535.86.10    CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla V100-SXM2-32GB           On  | 00000000:00:08.0 Off |                    0 |
| N/A   35C    P0              56W / 300W |   5404MiB / 32768MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A   3062036      C   ...unners/cuda_v11/ollama_llama_server     5402MiB |
+---------------------------------------------------------------------------------------+
  • 啟動後,我們可驗證是否可用:
curl http://10.80.2.195:7861/api/chat -d '{
  "model": "llama3.1",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'

1.6 更多其他配置

Ollama 可以設定的環境變數

  • OLLAMA_HOST:這個變數定義了Ollama監聽的網路介面。透過設定OLLAMA_HOST=0.0.0.0,我們可以讓Ollama監聽所有可用的網路介面,從而允許外部網路訪問。

  • OLLAMA_MODELS:這個變數指定了模型映象的儲存路徑。透過設定OLLAMA_MODELS=F:\OllamaCache,我們可以將模型映象儲存在E盤,避免C盤空間不足的問題。

  • OLLAMA_KEEP_ALIVE:這個變數控制模型在記憶體中的存活時間。設定OLLAMA_KEEP_ALIVE=24h可以讓模型在記憶體中保持24小時,提高訪問速度。

  • OLLAMA_PORT:這個變數允許我們更改Ollama的預設埠。例如,設定OLLAMA_PORT=8080可以將服務埠從預設的11434更改為8080。

  • OLLAMA_NUM_PARALLEL:這個變數決定了Ollama可以同時處理的使用者請求數量。設定OLLAMA_NUM_PARALLEL=4可以讓Ollama同時處理兩個併發請求。

  • OLLAMA_MAX_LOADED_MODELS:這個變數限制了Ollama可以同時載入的模型數量。設定OLLAMA_MAX_LOADED_MODELS=4可以確保系統資源得到合理分配。

Environment="OLLAMA_PORT=9380" 沒有用

  • 這樣指定:Environment="OLLAMA_HOST=0.0.0.0:7861"

  • 指定 GPU
    本地有多張 GPU,如何用指定的 GPU 來執行 Ollama? 在Linux上建立如下配置檔案,並配置環境變數 CUDA_VISIBLE_DEVICES 來指定執行 Ollama 的 GPU,再重啟 Ollama 服務即可【測試序號從0還是1開始,應是從0開始】。

vim /etc/systemd/system/ollama.service
[Service]
Environment="CUDA_VISIBLE_DEVICES=0,1"

1.7 Ollama常見命令

  1. 重啟 ollama
systemctl daemon-reload
systemctl restart ollama
  1. 重啟 ollama 服務

ubuntu/debian

sudo apt update
sudo apt install lsof
stop ollama
lsof -i :11434
kill <PID>
ollama serve


  • Ubuntu
sudo apt update
sudo apt install lsof
stop ollama
lsof -i :11434
kill <PID>
ollama serve

  1. 確認服務埠狀態:
netstat -tulpn | grep 11434

  1. 配置服務

為使外網環境能夠訪問到服務,需要對 HOST 進行配置。

開啟配置檔案:

vim /etc/systemd/system/ollama.service

根據情況修改變數 Environment:

伺服器環境下:

Environment="OLLAMA_HOST=0.0.0.0:11434"

虛擬機器環境下:

Environment="OLLAMA_HOST=伺服器內網IP地址:11434"

1.8 解除安裝Ollama

如果決定不再使用Ollama,可以透過以下步驟將其完全從系統中移除:

(1)停止並禁用服務:

sudo systemctl stop ollama
sudo systemctl disable ollama

(2)刪除服務檔案和Ollama二進位制檔案:

sudo rm /etc/systemd/system/ollama.service 
sudo rm $(which ollama)

(3)清理Ollama使用者和組:

sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama

透過以上步驟,不僅能夠在Linux平臺上成功安裝和配置Ollama,還能夠靈活地進行更新和解除安裝。

2.OpenLLM 部署

OpenLLM 於 2023 年 6 月開源,是一個用於部署大語言模型的框架。目前,該專案在 GitHub 上已經獲得了 9.6K星標。其最初的口號是透過一行程式碼或相對輕鬆地在不同的大語言模型之間切換,為個人使用者提供方便。OpenLLM是一個用於在生產環境中操作大型語言模型(LLM)的開放平臺,它可以輕鬆地微調、服務、部署和監控任何LLM。

  • 安裝
pip install openllm  # or pip3 install openllm
openllm hello
  • 支援模型
    • Llama-3.1
    • Llama-3
    • Phi-3
    • Mistral
    • Gemma-2
    • Qwen-2
    • Gemma
    • Llama-2
    • Mixtral

  • 在 設定 > 模型供應商 > OpenLLM 中填入:

    • 模型名稱:

    • 伺服器 URL:http://<Machine_IP>:3333 替換成您的機器 IP 地址 "儲存" 後即可在應用中使用該模型。

OpenLLM 提供了一個內建的 Python 客戶端,允許您與模型進行互動。在不同的終端視窗或 Jupyter notebook 中,建立一個客戶端以開始與模型互動:

import openllm
client = openllm.client.HTTPClient('http://localhost:3000')
client.query('Explain to me the difference between "further" and "farther"')
  • 可以使用 openllm query 命令從終端查詢模型:
export OPENLLM_ENDPOINT=http://localhost:3000
openllm query 'Explain to me the difference between "further" and "farther"'

使用 openllm models 命令檢視 OpenLLM 支援的模型及其變體列表。

3.LocalAI 部署

LocalAI 是一個本地推理框架,提供了 RESTFul API,與 OpenAI API 規範相容。它允許你在消費級硬體上本地或者在自有伺服器上執行 LLM(和其他模型),支援與 ggml 格式相容的多種模型家族。不需要 GPU。 Dify 支援以本地部署的方式接入 LocalAI 部署的大型語言模型推理和 embedding 能力。

  • giuhub:https://github.com/mudler/LocalAI/tree/master
  • 官網手冊:https://localai.io/docs/getting-started/models/
  • 官方快速部署手冊案例:https://localai.io/docs/getting-started/models/
  1. 首先拉取 LocalAI 程式碼倉庫,並進入指定目錄
git clone https://github.com/go-skynet/LocalAI
cd LocalAI/examples/langchain-chroma
  1. 下載demo LLM 和 Embedding 模型(僅供參考)
wget https://huggingface.co/skeskinen/ggml/resolve/main/all-MiniLM-L6-v2/ggml-model-q4_0.bin -O models/bert
wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j
  • 參考文章:告別Hugging Face模型下載難題
  1. 配置 .env 檔案
mv .env.example .env

NOTE:請確保 .env 中的 THREADS 變數值不超過您本機的 CPU 核心數。

  1. 啟動 LocalAI
#start with docker-compose
$docker-compose up -d --build

#tail the logs & wait until the build completes
docker logs -f langchain-chroma-api-1
7:16AM INF Starting LocalAI using 4 threads, with models path: /models
7:16AM INF LocalAI version: v1.24.1 (9cc8d9086580bd2a96f5c96a6b873242879c70bc)

 ┌───────────────────────────────────────────────────┐ 
 │                   Fiber v2.48.0                   │ 
 │               http://127.0.0.1:8080               │ 
 │       (bound on host 0.0.0.0 and port 8080)       │ 
 │                                                   │ 
 │ Handlers ............ 55  Processes ........... 1 │ 
 │ Prefork ....... Disabled  PID ................ 14 │ 
 └───────────────────────────────────────────────────┘ 

開放了本機 http://127.0.0.1:8080 作為 LocalAI 請求 API 的端點。

並提供了兩個模型,分別為:

  • LLM 模型:ggml-gpt4all-j

    對外訪問名稱:gpt-3.5-turbo(該名稱可自定義,在 models/gpt-3.5-turbo.yaml 中配置。

  • Embedding 模型:all-MiniLM-L6-v2

    對外訪問名稱:text-embedding-ada-002(該名稱可自定義,在 models/embeddings.yaml 中配置。

使用 Dify Docker 部署方式的需要注意網路配置,確保 Dify 容器可以訪問到localAI 的端點,Dify 容器內部無法訪問到 localhost,需要使用宿主機 IP 地址。

  1. LocalAI API 服務部署完畢,在 Dify 中使用接入模型

在 設定 > 模型供應商 > LocalAI 中填入:

  • 模型 1:ggml-gpt4all-j

    • 模型型別:文字生成
    • 模型名稱:gpt-3.5-turbo
    • 伺服器 URL:http://127.0.0.1:8080
    • 若 Dify 為 docker 部署,請填入 host 域名:http://your-LocalAI-endpoint-domain:8080,可填寫區域網 IP 地址,如:http://192.168.1.100:8080
  • 模型 2:all-MiniLM-L6-v2

    • 模型型別:Embeddings
    • 模型名稱:text-embedding-ada-002
    • 伺服器 URL:http://127.0.0.1:8080
    • 若 Dify 為 docker 部署,請填入 host 域名:http://your-LocalAI-endpoint-domain:8080,可填寫區域網 IP 地址,如:http://192.168.1.100:8080

如需獲取 LocalAI 更多資訊,請參考:https://github.com/go-skynet/LocalAI

4.配置LLM+Dify(ollama 🔺)

  • 確認服務埠狀態:
netstat -tulnp | grep ollama
#netstat -tulpn | grep 11434

  • 報錯: "Error: could not connect to ollama app, is it running?"

參考連結:https://stackoverflow.com/questions/78437376/run-ollama-run-llama3-in-colab-raise-err-error-could-not-connect-to-ollama

/etc/systemd/system/ollama.service檔案是:

[Service]
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0:7861"
Environment="OLLAMA_KEEP_ALIVE=-1"
  • 執行指令
export OLLAMA_HOST=0.0.0.0:7861
ollama list
ollama run llama3.1

#直接新增到環境變數也可以
vim ~/.bashrc 
source ~/.bashrc

在 設定 > 模型供應商 > Ollama 中填入:

  • 模型名稱:llama3.1

  • 基礎 URL:http://<your-ollama-endpoint-domain>:11434

    • 此處需填寫可訪問到的 Ollama 服務地址。
    • 若 Dify 為 docker 部署,建議填寫區域網 IP 地址,如:http://10.80.2.195:11434 或 docker 宿主機 IP 地址,如:http://172.17.0.1:11434
    • 若為本地原始碼部署,可填寫 http://localhost:11434
  • 模型型別:對話

  • 模型上下文長度:4096

    • 模型的最大上下文長度,若不清楚可填寫預設值 4096。
  • 最大 token 上限:4096

    • 模型返回內容的最大 token 數量,若模型無特別說明,則可與模型上下文長度保持一致。
  • 是否支援 Vision:是

    • 當模型支援圖片理解(多模態)勾選此項,如 llava。
  • 點選 "儲存" 校驗無誤後即可在應用中使用該模型。

  • Embedding 模型接入方式與 LLM 類似,只需將模型型別改為 Text Embedding 即可。

  • 如果您使用Docker部署Dify和Ollama,您可能會遇到以下錯誤:
httpconnectionpool(host=127.0.0.1, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))

httpconnectionpool(host=localhost, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))

這個錯誤是因為 Docker 容器無法訪問 Ollama 服務。localhost 通常指的是容器本身,而不是主機或其他容器。要解決此問題,您需要將 Ollama 服務暴露給網路。

4.1.多模型對比

參考單個模型部署一樣,進行再一次配置新增即可

  • 需要注意的是新增完新的模型配置後,需要重新整理dify網頁,直接網頁端重新整理就好,新新增的模型就會載入進來

  • 可以看到呼叫後模型資源消耗情況

  • 更多LLM平臺參考:

    • RAG+AI工作流+Agent:LLM框架該如何選擇,全面對比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推薦

    • 智勝未來:國內大模型+Agent應用案例精選,以及主流Agent框架開源專案推薦

  • 官方網址:https://dify.ai/zh

  • github地址:https://github.com/langgenius/dify/tree/main

  • ollama中文網址:https://ollama.fan/

  • ollama安裝教程:https://ollama.fan/getting-started/linux/

  • Ollama Linux部署與應用LLama 3

更多優質內容請關注公號:汀丶人工智慧;會提供一些相關的資源和優質文章,免費獲取閱讀。

更多優質內容請關注CSDN:汀丶人工智慧;會提供一些相關的資源和優質文章,免費獲取閱讀。

相關文章