AIアプリケーション用のDockerでLlamafileをコンテナ化するためのクイックガイド

この記事は Sophia Parafina の寄稿によるものです。

人工知能の急速な進歩に追いつくのは大変なことです。 毎週、新しい大規模言語モデル(LLM)、ベクターデータベース、革新的な技術が登場し、AI/ML開発の展望を変革する可能性があります。 開発者との広範なコラボレーションにより、AI開発でDockerを活用するための多くの創造的で効果的な戦略が明らかになりました。 

このクイックガイドでは、Dockerを使用して、LLMチャットボットを実行するために必要なすべてのコンポーネントを1つのファイルにまとめた実行可能ファイルであるllamafileをコンテナ化する方法を示します。 このガイドでは、llamafileをコンテナ化し、実験のために機能するチャットボットを実行するプロセスについて説明します。

LLMとローカル実行を結びつけるというLlamafileのコンセプトは、機能するLLMチャットボットをローカルで実行するプロセスを簡素化することを目的としているため、GenAI分野で高いレベルの関心を呼び起こしています。 

ファイルフォルダ上のラマを示す青と白のイラスト

llamafile のコンテナ化

Llamafile は、 Llama-2-7BMistral 7B、または GGUF 形式の他のモデルなどのオープンソースLLMを実行するMozillaプロジェクトです。 Dockerfile は llamafile をビルドしてコンテナー化し、サーバー モードで実行します。llamafile をビルドするためのベースイメージとして Debian trixie を使用します。 最終イメージや出力イメージは debian:stable をベースイメージとして使います。

開始するには、以下をコピーして貼り付け、Dockerfile という名前のファイルに保存します。

# Use debian trixie for gcc13
FROM debian:trixie as builder

# Set work directory
WORKDIR /download

# Configure build container and build llamafile
RUN mkdir out && \
    apt-get update && \
    apt-get install -y curl git gcc make && \
    git clone https://github.com/Mozilla-Ocho/llamafile.git  && \
    curl -L -o ./unzip https://cosmo.zip/pub/cosmos/bin/unzip && \
    chmod 755 unzip && mv unzip /usr/local/bin && \
    cd llamafile && make -j8 LLAMA_DISABLE_LOGS=1 && \ 
    make install PREFIX=/download/out

# Create container
FROM debian:stable as out

# Create a non-root user
RUN addgroup --gid 1000 user && \
    adduser --uid 1000 --gid 1000 --disabled-password --gecos "" user

# Switch to user
USER user

# Set working directory
WORKDIR /usr/local

# Copy llamafile and man pages
COPY --from=builder /download/out/bin ./bin
COPY --from=builder /download/out/share ./share/man

# Expose 8080 port.
EXPOSE 8080

# Set entrypoint.
ENTRYPOINT ["/bin/sh", "/usr/local/bin/llamafile"]

# Set default command.
CMD ["--server", "--host", "0.0.0.0", "-m", "/model"]

コンテナーをビルドするには、次のコマンドを実行します。

docker build -t llamafile .

llamafile コンテナーの実行

コンテナーを実行するには、Mistral-7b-v0.1などのモデルをダウンロードします。以下の例では、ボリュームとしてマウントされたディレクトリに model モデルを保存します。

$ docker run -d -v ./model/mistral-7b-v0.1.Q5_K_M.gguf:/model -p 8080:8080 llamafile

コンテナは、 llama.cppインターフェイス を備えたブラウザウィンドウを開きます(図 1)。

ラマのスクリーンショット。 プロンプト、ユーザー名、プロンプトテンプレート、チャット履歴テンプレート、予測などの設定オプションを表示するCppダイアログボックス。
図 1: Llama.cpp は、Georgi Gerganov による Facebook の LLaMA モデルの C/C++ 移植版で、Apple シリコンを含むさまざまなデバイスで効率的な LLM 推論を行うように最適化されており、簡単なセットアップと高度なパフォーマンス チューニング機能を備えています。
$ curl -s http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."
    },
    {
      "role": "user",
      "content": "Compose a poem that explains the concept of recursion in programming."
    }
  ]
}' | python3 -c '
import json
import sys
json.dump(json.load(sys.stdin), sys.stdout, indent=2)
print()
'

Llamafile には、モデルを調整するための多くのパラメーターがあります。 パラメータ man llama file は または で llama file --help確認できます。 パラメーターは、Dockerfile CMD ディレクティブで設定できます。

コンテナ化された llamafile が用意できたので、選択した LLM でコンテナを実行し、テストと開発の旅を始めることができます。 

次は何ですか?

AI 開発の旅を続けるには、 Docker GenAI ガイドを読み、ブログで 追加の AI コンテンツ を確認し 、リソースを確認してください。 

 さらに詳しく