背景・目的
- DeepSeek V3 0324が精度が良いとのこと
- Mac Studio M3 Ultraの512GBのメモリであれば、4bit量子化版を動かせるのでは?と思い試してみた
結論
-
DeepSeekV3はmlx_lmを使って動かすことができた
-
unslothのQ4_K_XLは、llama.cppで試してみたもののうまく動かなかった(
====
がずっと生成された)
-
unslothのQ4_K_XLは、llama.cppで試してみたもののうまく動かなかった(
- mlx_lmでOpenAI互換のサーバーはmlx_lm/server.pyを使って起動できた
- プロンプトキャッシュなども有効化されている
詳細
DeepSeek-V3-0324とは
DeepSeek V3 0324は、最新のオープンソースAIモデルであり、従来のAIモデルを凌駕する性能を誇ります。このモデルは、6710億から6850億パラメータに増強され、特に論理推論、プログラミング、数学問題解決において顕著な改善が見られます。DeepSeek V3 0324は、AIアプリケーションの開発において非常に有用であり、特に以下の点で優れています。
主な特徴
-
強化された推論能力: DeepSeek V3 0324は、論理的な推論や数学的な問題解決において、前バージョンに比べて大幅に性能が向上しています。これにより、AIアシスタントやコーディング支援ツールとしての利用が期待されます。
-
フロントエンド開発の改善: このモデルは、Tailwindを使用したUIコンポーネントの生成や、インタラクティブなゲームフロントエンドの作成においても優れた能力を発揮します。ユーザーは、自然言語での説明を入力することで、即座にHTML/CSS/JSコードを生成し、視覚的なプレビューを得ることができます。
-
大規模なコンテキストウィンドウ: 128Kトークンのコンテキスト長を持つこのモデルは、長文の会話や文書分析においても優れたパフォーマンスを発揮します。これにより、より複雑なタスクに対応可能です。
-
オープンソースの利点: DeepSeek V3 0324はオープンソースであり、開発者は自由に利用・改良することができます。これにより、さまざまなAI駆動のアプリケーションを迅速に構築することが可能です。
実用性と応用
DeepSeek V3 0324は、チャットボットやカスタマーサービスの自動化、翻訳などのリアルタイムアプリケーションにおいても優れた性能を発揮します。特に、非推論タスクにおいては、従来のAIモデルを上回る結果を出しています。
このモデルは、AI技術の進化を象徴するものであり、開発者や企業にとって、AI駆動のソリューションを構築するための強力なツールとなるでしょう。DeepSeek V3 0324の登場により、AIの可能性はさらに広がり、さまざまな分野での応用が期待されます。
MLX-LMとは
MLX-LMは、Appleシリコン上で大規模言語モデル(LLM)を生成し、ファインチューニングするためのPythonパッケージです。このパッケージは、特にMLXフレームワークと統合されており、ユーザーが簡単にLLMを操作できるように設計されています。
主な機能
- Hugging Face Hubとの統合: 数千のLLMを単一のコマンドで簡単に使用できます。
- モデルの量子化とアップロード: モデルを量子化し、Hugging Face Hubにアップロードすることが可能です。
- 低ランクおよびフルモデルのファインチューニング: 量子化されたモデルのサポートも含まれています。
-
分散推論とファインチューニング:
mx.distributed
を使用して、分散環境での処理が可能です。
MLX-LMを使ってDeepSeek V3 0324の動かし方
pip install mlx-lm # mlx_lmを使えるようにする
sudo sysctl iogpu.wired_limit_mb=480000 # GPUが利用できるメモリを増やす
以下の内容をrun.pyという名前で保存し、python run.py
で実行するとモデルがダウンロードされ、実行できる。
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/DeepSeek-V3-0324-4bit")
prompt = "hello"
if tokenizer.chat_template is not None:
messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True
)
response = generate(model, tokenizer, prompt=prompt, verbose=True)
ただ、データ量がかなり大きく、ダウンロードスピードが遅いため、ダウンロードに1日近くかかるので注意。
実行結果は以下
! How can I assist you today? 😊
==========
Prompt: 4 tokens, 22.313 tokens-per-sec
Generation: 12 tokens, 23.413 tokens-per-sec
Peak memory: 378.897 GB
mlx-community/DeepSeek-V3-0324-4bitについて
データサイズ: 352GB
du -sh ~/.cache/huggingface/hub/models--mlx-community--DeepSeek-V3-0324-4bit
352G /Users/username/.cache/huggingface/hub/models--mlx-community--DeepSeek-V3-0324-4bit
コンテキスト長: 16384
>>> from mlx_lm import load
>>> model, tokenizer = load("mlx-community/DeepSeek-V3-0324-4bit")
>>> tokenizer.model_max_length
16384
(この値は変更できた。)
>>> model, tokenizer = load("mlx-community/DeepSeek-V3-0324-4bit", tokenizer_config={"model_max_length": 32768})
>>> tokenizer.model_max_length
32768
待機時のメモリ利用: 350GB程度
Roo Codeで利用する
- サーバーを立てる
-
mlx_lm/server.pyを使う
- これを使うとプロンプトキャッシュ込みのOpenAI一部互換のサーバーが立ち上がる
- localhost:8080で待機される
-
mlx_lm/server.pyを使う
- Roo Codeからアクセスする
- API Provider: Ollama(OpenAI Compatibleでも良さそう)
- Base URL:
http://localhost:8080
- Model ID:
mlx-community/DeepSeek-V3-0324-4bit