阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

使用 Docker 在本機上執行大型語言模型 (LLM)?是的,你沒聽錯。 Docker 現在不僅僅是執行容器映像。使用Docker Model Runner ,您可以在本地執行 LLM 並與之互動。

不難想像,我們已經看到了向人工智慧和 GenAI 的巨大發展轉變。考慮到從成本到設定的所有麻煩,開發由 GenAI 驅動的應用程式並不容易。像往常一樣,Docker 介入並發揮其重要作用:使 GenAI 開發更容易,以便開發人員可以更快地建置和交付產品和專案。我們可以在我們的機器上原生執行 AI 模型!是的,它在容器外執行模型。目前,Docker Model Runner 處於 Beta 階段,可用於具有 Apple Silicon 的 Docker Desktop for Mac,需要 Docker Desktop 4.40 或更高版本。

在這篇部落格中,我們將探討 Docker Model Runner 的優點以及如何以各種形式使用它。讓我們直接開始吧!

Docker Model Runner 的優勢

  • 開發人員流程:作為開發人員,我們不喜歡的最重要的方面之一是上下文切換和使用 100 種不同的工具,而幾乎所有其他開發人員都在使用的 Docker 使事情變得簡單並降低了學習曲線。

  • GPU 加速:Docker Desktop 直接在主機上執行llama.cpp 。推理伺服器可以存取Apple的Metal AP,從而可以直接存取Apple Silicon上的硬體GPU加速。

  • OCI Artifcats :將 AI 模型儲存為 OCI artifcats,而不是將其儲存為 Docker 映像。這節省了磁碟空間並減少了所有內容的提取。此外,由於它是一種行業標準格式,這將提高相容性和適應性。

  • 一切本地化:您無需面對雲端 LLMs API 金鑰、速率限制、延遲等麻煩,同時在本地綁定產品並支付昂貴的費用。另一個重要方面是資料隱私和安全。當需要時,模型由 llama.cpp 動態載入到記憶體中。

行動中

確保您的系統中安裝了 Docker Desktop v4.40 或更高版本。一旦你擁有了它,請確保你已經透過設定>開發中的功能啟用了啟用 Docker 模型執行器。您也可以選取啟用主機端 TCP 支援以從本機進行通訊(我們將在下方看到一個示範)。

Docker 桌面

完成後。點擊“應用並重新啟動”,一切就完成了。為了測試它是否正常運作,請開啟任意類型的docker model終端,您將看到所有可用命令的輸出,這可以驗證一切是否如預期運作。

因此,為了與 LLM 進行交互,我們有兩種方法(截至目前,請關注)即 CLI 或 API(與 OpenAI 相容)。 CLI 在 API 方面非常簡單。我們可以從正在執行的容器內部或本機與 API 進行互動。讓我們更詳細地看一下這些。

從 CLI

如果您使用過 docker cli(幾乎每個使用過容器的開發人員都使用過)並使用過諸如docker pulldocker run等命令,則 docker 模型使用相同的模式,只有子命令加入即model關鍵字,因此要拉取模型我們將執行docker model pull <model name>或執行拉取的模型 <docker model pull docker model run <model name> 。它使事情變得容易得多,因為我們不需要為新工具學習全新的措辭。

以下是目前支援的所有命令。還有一些即將推出(其中一些也是我最喜歡的)。敬請關注!

終端截圖

現在,要執行某種模式,我們首先需要拉動它。例如,我們將執行llama3.2 。您將在Docker Hub 的 GenAI 目錄中找到所有可用的模型。因此,打開終端機並執行docker model pull ai/llama3.2 。根據模型大小和網路頻寬,拉取它將需要一些時間。拉取後,執行docker model run ai/llama3.2 ,它將像普通聊天機器人或 ChatGPT 一樣開始非活動聊天,完成後,您可以使用/bye退出互動式聊天模式。以下是螢幕截圖:

終端截圖

來自 API(OpenAI)

Model Runner 的一大優點是它實現了與 OpenAI 相容的端點。我們可以透過多種方式與 API 進行交互,例如在正在執行的容器內或從主機使用 TCP 或 Unix 套接字進行交互。

我們將看到不同方式的範例,但在此之前,這裡是可用的端點。無論我們從容器內部還是從主機與 API 交互,端點都將保持不變。僅主機會改變。

# OpenAI endpoints
    GET /engines/llama.cpp/v1/models
    GET /engines/llama.cpp/v1/models/{namespace}/{name}
    POST /engines/llama.cpp/v1/chat/completions
    POST /engines/llama.cpp/v1/completions
    POST /engines/llama.cpp/v1/embeddings
    Note: You can also omit llama.cpp.

從容器內部

在容器內部,我們將使用http://model-runner.docker.internal作為基本 URL,並且我們可以存取上面提到的任何端點。例如,我們將點擊/engines/llama.cpp/v1/chat/completions端點進行聊天。

我們將使用curl 。您可以看到它使用與 OpenAI API 相同的模式結構。確保您已經提取了要使用的模型。

    curl http://model-runner.docker.internal/engines/llama.cpp/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai/llama3.2",
        "messages": [
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Please write 100 words about the docker compose."
            }
        ]
    }'

因此,為了測試它是否可以在正在執行的容器內部工作,我以交互模式執行jonlabelle/network-tools映像,然後使用上面的 curl 命令與 API 通訊。而且它成功了。

如您所見,以下是我收到的回覆。回應為 JSON 格式,包括產生的訊息、令牌使用情況、模型詳細資訊和回應時間。就像標準一樣。

終端截圖

來自主持人

正如我之前提到的,要與 A 交互,您必須確保已啟用 TCP。您可以透過造訪localhost:12434來驗證它是否正常運作。您將看到一則訊息,提示「Docker Model Runner」。服務正在執行。

在此,我們將以http://localhost:12434作為基本 URL,並遵循相同的端點。 curl 命令也是如此;我們只需替換基本 URL,一切將保持不變。

    curl http://localhost:12434/engines/llama.cpp/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai/llama3.2",
        "messages": [
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "user",
                "content": "Please write 100 words about the docker compose."
            }
        ]
    }'

讓我們在終端機中執行它來嘗試:

它將傳回與另一個相同的 JSON 格式回應,包括產生的訊息、令牌使用情況、模型詳細資訊和回應時間。

終端截圖

有了此 TCP 支持,我們不僅限於與容器內執行的應用程式進行交互,還可以與任何地方進行交互。

關於部落格的內容就是這樣。您可以從此處的官方文件中了解有關 Docker Model Runner 的更多資訊。並留意 Docker 公告;還會有更多。像往常一樣,我很高興您堅持到了最後——非常感謝您的支持。我定期在Twitter上分享技巧(永遠都是 Twitter ;))。您可以在那裡與我聯繫。


原文出處:https://dev.to/pradumnasaraf/docker-can-run-llms-locally-wait-what-35fn


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!