[OSS紹介#72] MLC LLM:AIモデルの効率的なデプロイと最適化をサポートするツール

この記事について

この記事では、注目のオープンソースソフトウェア(OSS)「MLC LLM」を紹介します。この記事は、連載第72回目となり、特に大規模言語モデルのデプロイや最適化における革新を目指しているこのツールに焦点を当てます。

近年、AIの進化により、機械学習モデルの開発と運用がますます重要視されていますが、異なるプラットフォーム間での互換性や高性能な推論エンジンの必要性が高まっています。「MLC LLM」は、異なるハードウェアや環境において機械学習モデルを効率的に展開できることを目的としたツールであり、特に多様なGPUサポートと高いコンパイル性能が注目されています。

この記事を通じて、MLC LLMの基本的な機能や特長、利用価値について詳しく解説し、開発者や研究者が自身のプロジェクトにどのように活かせるかを考察していきます。これは単なるツールの紹介にとどまらず、現代のAI開発における新たな可能性を切り開くための一助となることを目指しています。

リンク:https://github.com/mlc-ai/mlc-llm


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. MLC LLMでできること

MLC LLM は、大規模言語モデルのための機械学習コンパイラおよび高性能デプロイメントエンジンです。このツールは、AI モデルを各プラットフォームでネイティブに開発、最適化、デプロイすることを可能にします。MLC LLM は、以下の機能を提供します。

  • 高性能推論エンジン: MLCEngine を使用し、複数のプラットフォームでの高性能な LLM 推論を実現します。
  • OpenAI 互換 API: REST サーバーを通じて利用可能な API を提供し、Python、JavaScript、iOS、Android などの多くの言語でサポートしています。
  • 幅広いプラットフォーム対応: AMD、NVIDIA、Apple、Intel の各 GPU や、Web ブラウザ、iOS、Android プラットフォームに対応しています。
  • WebLLM のサポート: MLC LLM は WebGPU および WebAssembly にも対応しており、ウェブブラウザでのローカル実行を可能にします。これにより、サーバーを使用せずに LLM を実行することができます。

2. セットアップ手順

MLC LLMのセットアップは、以下の手順で行います。

2.1 動作環境

MLC LLMは、以下の環境で動作します。

  • Linux / Windows:
    • AMD GPU: Vulkan, ROCm
    • NVIDIA GPU: Vulkan, CUDA
    • Intel GPU: Vulkan
  • macOS:
    • AMD GPU: Metal (dGPU)
    • Apple GPU: Metal
    • Intel GPU: Metal (iGPU)
  • Webブラウザ: WebGPUおよびWASM
  • iOS / iPadOS: Apple AシリーズGPU上のMetal
  • Android:
    • Adreno GPU上のOpenCL
    • Mali GPU上のOpenCL

2.2 インストール手順

MLC LLM をインストールするには、公式ドキュメントに従います。以下は、2 つのインストールオプションです。

オプション 1: プリビルトパッケージのインストール

MLC LLM は、プリビルトの開発者パッケージから直接インストールできます。以下のコマンドを使用します。

conda activate your-environment
python -m pip install --pre -U -f https://mlc.ai/wheels mlc-llm-nightly-cpu mlc-ai-nightly-cpu

この方法では、隔離された Python 環境を管理するためにcondaを使用することが推奨されています。Python 3.11 を使用し、環境を作成する場合は以下のコマンドをお勧めします。

conda create --name mlc-prebuilt python=3.11

インストール後は以下のコマンドで確認できます。

python -c "import mlc_llm; print(mlc_llm)"

オプション 2: ソースからのビルド

ソースから MLC LLM をビルドする場合、以下の手順に従います。

1. ビルド依存関係のセットアップ: 次の依存関係を満たしてください。

  • CMake >= 3.24
  • Git
  • Rust および Cargo (Hugging Face のトークナイザー用)

2. ビルドの設定と実行:

git clone --recursive https://github.com/mlc-ai/mlc-llm.git && cd mlc-llm/
mkdir -p build && cd build
python ../cmake/gen_cmake_config.py
cmake .. && cmake --build . --parallel $(nproc) && cd ..

3. Python 経由でのインストール:

export MLC_LLM_SOURCE_DIR=/path-to-mlc-llm
export PYTHONPATH=$MLC_LLM_SOURCE_DIR/python:$PYTHONPATH
alias mlc_llm="python -m mlc_llm"

最後に、インストールが成功したか確認するために、以下のコマンドを実行します。

ls -l ./build/
mlc_llm chat -h

3. 簡単な使い方

MLC LLMの基本的な使い方は、以下の手順で行えます。

3.1 モデルのコンパイル

モデルをコンパイルするには、MLC LLMが提供する関数を使用します。具体的なコード例は、クイックスタートガイドに記載されています。

3.2 APIの利用

MLC LLMでは、OpenAI互換のAPIが用意されており、これを通じてモデルの推論を実行できます。具体的には、Pythonスクリプトを使用して、次のようにモデルを呼び出します。

from mlc_llm import MLCEngine

# エンジンを作成
model = "HF://mlc-ai/Llama-3-8B-Instruct-q4f16_1-MLC"
engine = MLCEngine(model)

# OpenAI APIでのチャット補完を実行
for response in engine.chat.completions.create(
    messages=[{"role": "user", "content": "What is the meaning of life?"}],
    model=model,
    stream=True,
):
    for choice in response.choices:
        print(choice.delta.content, end="", flush=True)
print("\n")
engine.terminate()

APIの使用方法については、ドキュメント内のAPIリファレンスを参照してください。

3.3 RESTサーバーの利用

MLC LLMのRESTサーバーを利用することで、クライアントからのリクエストに対してモデルを提供することもできます。以下のコマンドでサーバーを起動し、指定のエンドポイントでリクエストを送信します。

mlc_llm serve HF://mlc-ai/Llama-3-8B-Instruct-q4f16_1-MLC

リクエストの例は次の通りです。

curl -X POST \
 -H "Content-Type: application/json" \
 -d '{
 "model": "HF://mlc-ai/Llama-3-8B-Instruct-q4f16_1-MLC",
 "messages": [
 {"role": "user", "content": "Hello! Our project is MLC LLM. What is the name of our project?"}
 ]
 }' \
 http://127.0.0.1:8000/v1/chat/completions

結論

MLC LLMは、さまざまなプラットフォームで動作する高性能な大規模言語モデルのデプロイメントエンジンです。ユーザーは簡単にモデルをコンパイルし、APIを利用して推論を実行できます。さらに、活発なコミュニティによるサポートが得られるため、開発者にとって非常に有用なツールとなっています。興味のある方は、ぜひMLC LLMを試してみてください。