Mixtral-8x7Bのファインチューニング済モデルをいくつか試してみる on Databricks

# 導入

Mixtral-8x7Bが性能的にも面白いので、HuggingfaceにあるファインチューニングモデルをDatabricks上でいくつか試してみます。

以前のMixtralの記事は↓から。

https://qiita.com/isanakamishiro2/items/6e06154a42df1bfecb5c

今回は、以下の二つを試してみます。

## OpenBuddy Mixtral 8x7B v15.2

https://huggingface.co/OpenBuddy/openbuddy-mixtral-8x7b-v15.2

[OpenBuddy社](https://openbuddy.ai/)が公開しているMixtral-8x7BをファインチューニングしたLLMです。
OpenBuddyは以前から様々なモデルの多言語ファインチューニングモデルを出しており、日本語もまあまあ使える印象があります。

OpenBuddy Mixtralは既にv15.4が出ているようなのですが、事前にダウンロードしていたのがv15.2だったので過去バージョンとなります。

## Dolphin-2.6-Mixtral-8x7B

https://huggingface.co/cognitivecomputations/dolphin-2.6-mixtral-8x7b

[Cognitive Computations](https://erichartford.com/?source=top_nav_blog_home)が公開しているMixtral-8x7BをファインチューニングしたLLMです。
2023/12/24現在、HuggingfaceのモデルトレンドがMicrosoftのphi-2に次いで２番目に人気のあるモデルとなっています。

あまり日本語は使えないかな、と思うのですがやってみました。


<br>

なお、今回は上記そのままを使うのではなく、手軽に試すために以下のEXL2形式で量子化されたモデルを使います。
そのため、結構性能劣化していると思われます。試した結果は参考程度としてください。

https://huggingface.co/LoneStriker/openbuddy-mixtral-8x7b-v15.2-3.0bpw-h6-exl2-2

https://huggingface.co/LoneStriker/dolphin-2.6-mixtral-8x7b-3.0bpw-h6-exl2

DatabricksのDBRは14.1、クラスタタイプはg5.xlarge(AWS)です。

# Step1. Question and Answer試行

以前の下記記事で行った、コンテキストから回答させる葬送のフリーレン質問を実行してみます。

https://qiita.com/isanakamishiro2/items/ecc517bc578b5c1d8018

結果はこちら。
オリジナルのMixtral(ただし、同じ3bit量子化)も含めて結果を出しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/340fc7bd-acdf-3787-432a-9e9afaebadf7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/64a28e3b-5bcc-edfd-185e-8d0912cb0b0d.png)

回答の正しさはそこまでよくはないですが、オリジナルと比較するとOpenBuddyもDolphinも日本語性能は上がっているように見えます。

## 補足

ちなみにMixtral以外も最近のモデルでいくつか行っていて、以下のような結果です。
Swallowの回答がよくないのは、量子化がうまくいっていないためな気がします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/e8b9af59-883a-3754-2205-a13d19e64916.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/bcb856cd-00a9-a323-0b96-6e24466c725b.png)

# Step2. チャットボット化して動かしてみる

これまた以前の記事で作成したチャットボットアプリ化して、いくつか質問・指示してみます。

https://qiita.com/isanakamishiro2/items/835b691c72bcb16b52b7

こんな画面の簡易チャットアプリです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/5ac221d9-5f76-8981-240e-6abaa7e003c5.png)


時間の関係上、OpenBuddy Mixtralでのみ実施しました。


## Databricksとは何ですか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/53ef702e-5d2c-5979-2ad3-4a185b064ee7.png)

OpenBuddyはかなり日本語能力高いですね。

## 東京、名古屋、大阪の特徴を簡潔に表にまとめてください。列名は「都道府県」「おすすめスポット」「おすすめグルメ」にしてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/a1f1dd3f-2f9c-f990-f5af-33af0ee46390.png)

HTMLタグが正しく表示できていませんが、まあまあ妥当な内容でしょうか。名古屋がおかしいですが。。。
十分な日本知識があるわけではないでしょうから、こんなものかな。

## ランダムな10個の要素からなるリストを作成してソートするコードをPythonで書いてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/bf45dd5b-36d5-637c-a71c-a3fce35841e0.png)

ちゃんと動くコードが生成されました。
Mistral/Mixtralはもともとコード生成能力が高いので、十分な能力を持っているように思います。

## いつものおまけ

![llm_chat1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168727/fd15df91-1757-a533-f4cf-9b081db102b5.gif)

いつもの「誰やねん」。
しかし、パラメータサイズがトータルでは結構大きいのですが、MoEの特性上、生成速度は十分に速いですね。

# まとめ

Mixtralのファインチューニングモデルをいくつか試してみました。
OpenBuddyなどは日本語性能が思ったより高く、量子化ではないモデルを使えば性能も高いのではないかと思います。

Mixtralは以下のBlogにもあるように、DatabricksのFoundation Model APIにも採用されたりと、個人的にも今後の発展を期待しているオープンLLMの一つです。
きっとMixtralベースの日本語特化LLMがStability.aiあたりから出ることでしょう！（願望）。

https://www.databricks.com/blog/introducing-mixtral-8x7b-databricks-model-serving

※　Databricks東京リージョンに早くこれらの機能こないかなあ。。。