Mistral-Nemo-Japanese-Instruct-2408 モデルについてのご質問

#1
by linglanfeng - opened

お世話になっております。

先日提供いただいた日本語モデル「Mistral-Nemo-Japanese-Instruct-2408」を利用させていただいておりますが、いくつかの問題に遭遇しておりますので、ご教示いただければ幸いです。

モデル処理の流れは以下のとおりです:

まず、llama.cpp を用いて safetensors 形式への変換を行いました。

docker run -v /huggingface_models:/models ghcr.io/ggerganov/llama.cpp:full --convert "/models/Mistral-Nemo-Japanese-Instruct-2408/"

次に、quantize 処理を実行しました。

docker run -v /huggingface_models:/models ghcr.io/ggerganov/llama.cpp:full --quantize /models/Mistral-Nemo-Japanese-Instruct-2408/Mistral-Nemo-Japanese-12B-Instruct-2408-F16.gguf /models/Mistral-Nemo-Japanese-Instruct-2408/Mistral-Nemo-Japanese-Instruct-2408-Q4_K_M.guff Q4_K_M

その後、ollama(バージョン0.3.14)のサーバーにモデルをインポートし、Modelfile には以下の内容を設定しました:

FROM mistral-nemo-japanese-instruct-2408-q4_k_s.gguf
TEMPLATE
"""
{{- range $i, $_ := .Messages }}
{{- if eq .Role "user" }}
{{- if and $.Tools (le (len (slice $.Messages $i)) 2) }}[AVAILABLE_TOOLS] {{ $.Tools }}[/AVAILABLE_TOOLS]
{{- end }}
[INST] {{ if and $.System (eq (len (slice $.Messages $i)) 1) }}{{ $.System }} {{ end }}{{ .Content }}[/INST]
{{- else if eq .Role "assistant" }}
{{- if .Content }}
{{ .Content }}{{ if not (eq (len (slice $.Messages $i)) 1) }}</s>{{ end }}
{{- else if .ToolCalls }}
[TOOL_CALLS] [ {{- range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}} {{- end }}]</s>
{{- end }}
{{- else if eq .Role "tool" }}
[TOOL_RESULTS] {"content": {{ .Content }}} [/TOOL_RESULTS]
{{- end }}
{{- end }}
"""
PARAMETER stop [INST]
PARAMETER stop [/INST]

こちらの TEMPLATE 内容は ollama show mistral-nemo:latest --template から取得したもので、Mistral-Nemo-Japanese-Instruct-2408Mistral-Nemo を利用してファインチューニングされたモデルであるため、同じテンプレートを使用することにしました。

モデルのインポートは正常に完了したものの、チャットを行う際にモデルの出力が制御不能となり、回答内容も全く正しくありません。

こちらで考えている原因として、Japanese Fine-tuning の際に PARAMETER stop が変更されたことが影響しているのではないかと推測しております。

そこで、デフォルトの TEMPLATE 内容を以下のように使用してみましたが、症状は改善されませんでした:

TEMPLATE
"{{- range .Messages }}<|im_start|>{{ .Role }} {{ .Content }}<|im_end|> {{ end }}<|im_start|>assistant "
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>

その結果、モデルの回答は正しくなったものの、Function Callが使用できなくなりました。

このような状況を踏まえ、今後どのように対応すべきかご指導いただけますと幸いです。

LLama 3のTemplateを模倣すべきでしょうか?

もし可能であれば、Function Callが実行できるTemplateを提供いただけないでしょうか?

ご多忙のところ恐縮ですが、この問題の解決策についてご指導いただけますと大変助かります。

よろしくお願いいたします。

Sign up or log in to comment