メインコンテンツへスキップ
見出し画像

Ollama で Hugging Face Hub の GGUF をそのまま使ってみる

    tl;dr

    • Ollama で Modelfile を作成することなく、Hugging Face Hub で公開されている GGUF 形式のモデルをそのまま動かせるようになったよ

    • やり方は簡単で ollama run hf.co/{ユーザー名}/{リポジトリ名} とするだけ

    • 量子化タイプの指定はデフォルト Q4_K_M で好きなタイプも指定可

    • チャットテンプレートはデフォルトは GGUF 内ビルトインテンプレートで自分で指定することも可

    Fuck it! You can now run *any* GGUF on the Hugging Face Hub directly with @ollama 🔥

    This has been a constant ask from the community, starting today you can point to any of the 45,000 GGUF repos on the Hub*

    *Without any changes whatsoever! ⚡

    All you need to do is:

    ollama run… pic.twitter.com/jFD0MY3PTJ

    — Vaibhav (VB) Srivastav (@reach_vb) October 16, 2024

    まずは動かしてみる

    めちゃ簡単ですが解説。`ollama run xxx` とこれまでモデルを指定していましたが、指定する箇所に Hugging Face Hub のリポジトリをそのまま指定できるようになりました。

    ollama run hf.co/{ユーザー名}/{リポジトリ}

    あるいは下記のドメインで指定することも可能です。

    ollama run huggingface.co/{ユーザー名}/{リポジトリ名}

    では、Hugging Face の中の方が公開されていらっしゃる Llama-3.2-1B-Instruct-GGUF を指定してみましょう。

    ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:latest

    超簡単。例として下記の例が挙げられています。

    ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF
    ollama run hf.co/mlabonne/Meta-Llama-3.1-8B-Instruct-abliterated-GGUF
    ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
    ollama run hf.co/bartowski/Humanish-LLama3-8B-Instruct-GGUF

    ollama list でどんな形式でローカル環境にダウンロードされているかを見ても想像の通りでした。ちなみに、気になったので hf.co / huggingface.co のそれぞれを試して見たのですが、ドメイン名ごとに管理されるようです。

    画像
    hf.co/{ユーザー名}/{リポジトリ名} となっていますね

    指定できる量子化

    GGUF のモデルリポジトリでは、各量子化されたモデルが複数個入っていることが多いです。今回の ollama run hf.co* で指定する場合は、デフォルトで Q4_K_M が指定されます。ただし、Q4_K_M のモデルが存在しない場合は、リポジトリ内に存在する適切な量子化タイプが選択されます(一番大きいモデル?未検証)。latest で指定すると上記のデフォルトで指定されたモデルが選択されますが、自分で量子化タイプを指定することも可能です。Ollama を使い慣れていらっしゃる方は馴染みがあるかと思いますが、タグを指定するだけです。

    ollama run hf.co/{ユーザー名}/{リポジトリ名}:{量子化タイプ}
    画像
    「:」のあとに量子化タイプを記載

    具体例として下記が挙げられています。

    ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:IQ3_M
    ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:Q8_0
    
    # 量子化タイプ名は大文字小文字を区別しないため、下記の指定でも動作します。
    ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:iq3_m
    
    # リポジトリ名ではなく、フルファイルパスをタグとして直接使用することもできます。
    ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:Llama-3.2-3B-Instruct-IQ3_M.gguf

    チャットテンプレートのカスタマイズとパラメータ指定

    チャットテンプレートの指定について、デフォルトではよく使われるテンプレートのリストから自動的にテンプレートが指定されます。GGUF ファイル内に記載されているビルトインテンプレート `tokenizer.chat_template` を参照するようです。

    もし仮に GGUF ファイルにビルトインテンプレートが存在しない場合やチャットテンプレートをカスタマイズしたい場合は、リポジトリ内に新たに `template` というファイルを作成し、使うこともできます。この際のテンプレートは Jinja テンプレートではなく、Go テンプレートである必要があります。Go テンプレートとして、下記の具体例が挙げられています。Ollama のリポジトリでよく見る形式ですね。

    {{ if .System }}<|system|>
    {{ .System }}<|end|>
    {{ end }}{{ if .Prompt }}<|user|>
    {{ .Prompt }}<|end|>
    {{ end }}<|assistant|>
    {{ .Response }}<|end|>

    Go テンプレートは Ollama のドキュメントに詳細が記載されています。

    また、システムプロンプトを指定したい場合は、リポジトリ内に追加で `system` というファイルを作成し、その中にシステムプロンプトを記述してください。

    サンプリングパラメータを変更する場合は、(ここまでと同じように指定するだけですが)リポジトリ内に `params` というファイルを作成してください。この `params` ファイルの形式は JSON である必要があります。

    指定できるすべてのパラメータは Ollama の Modelfile ページに記載されています。

    他に参考文献として下記のページが紐づけられています。

    以上となります。Ollama がめちゃくちゃ便利になってすごくうれしいです!まだ Ollama を使われたことのない方がいらしたらこれを機に遊んでみてください。

    また、同じ日に発表された Llama-3.1-Nemotron-70B-Instruct も Ollama で動かしてみましたのでご覧いただければと思います!

    そういえば、直近これらのイベント↓に出没します!もしご都合の合う方がいらしたら遊びに来てください!

    あなたへのおすすめ