見出し画像

mlx環境で、OpenHermes-2.5-Mistral-7Bにチャレンジ:chatできました

HuggingFaceにmlxのモデルがぞろぞろでてきています。

そこで今回は、下記にトライしてみます。Chatが普通にできそうな感じだったので選んでみました。

conda activate mlxenv

mlxのconda環境を立ち上げて

cd ~/ai/projects

このdirectoryの下に、ファイルをコピーします。

git clone https://github.com/riccardomusmeci/mlx-llm

copyできたdirectoryに移動

cd mlx-llm

次のコマンドの意味がわからなくてGPT-4に確認しました。

pip install .

`setup.py` ファイルがなく、代わりに `pyproject.toml` がある場合、これは [PEP 517](https://www.python.org/dev/peps/pep-0517/) と [PEP 518](https://www.python.org/dev/peps/pep-0518/) に準じたモダンなパッケージ構造を使用していることを示しています。この場合、パッケージの依存関係とビルドシステムは `pyproject.toml` ファイルによって管理されています。

`pyproject.toml` ファイルが存在する場合、パッケージのインストールには `pip` コマンドを使用することができますが、このファイルが示すのはしばしば [`poetry`](https://python-poetry.org/docs/) のような別のパッケージ管理ツールを使うことを意味しています。`poetry.lock` ファイルもあるということは、このプロジェクトは `poetry` によって管理されている可能性が高いです。

`poetry` を使って依存関係をインストールし、プロジェクトをセットアップするには、次のようにします:

```sh
poetry install
```

しかし、もし `poetry` を使いたくない場合は、`pip` コマンドも `pyproject.toml` ファイルがあるプロジェクトに対して使用することができます。その場合、カレントディレクトリにあるパッケージをインストールするには、以下のコマンドを実行します:

```sh
pip install .
```

このコマンドは `pip` が `pyproject.toml` ファイルを認識し、必要な依存関係情報を読み取ってパッケージをビルドおよびインストールすることを意味します。

もし `poetry` がまだインストールされていない場合は、以下のコマンドでインストールできます:

```sh
pip install poetry
```

以前は `setup.py` が一般的でしたが、Python コミュニティではより宣言的でありビルドシステムのカスタマイズを可能にする `pyproject.toml` へと移行しつつあります。

GPT-4

実行してもよさそうなので、実行

続けて、Pythonインタプリタを起動

(mlxenv) mlx-llm % python
Python 3.11.5 (main, Sep 11 2023, 08:31:25) [Clang 14.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.

無事に起動されたみたいなので、次をいれてみる

from mlx_llm.model import list_models

print(list_models())

>>> print(list_models())
['Mistral-7B-Instruct-v0.1', 'Mistral-7B-Instruct-v0.2', 'llama-2-7b-chat', 'OpenHermes-2.5-Mistral-7B']
>>>

モデルをダウンロードするためPythonから抜ける

exit()

huggingfaceからダウンロードを早くするため下記の入力

pip install huggingface_hub hf_transfer
export HF_HUB_ENABLE_HF_TRANSFER=1

ダウンロードコマンドの説明

Hugging Face Hubから特定のモデルをダウンロードして、それをローカルディレクトリに保存するためのコマンドです。コマンドの構成要素を説明します:

huggingface-cli download --local-dir <destination-directory> <model-id>

--local-dir <destination-directory>はダウンロードしたファイルを保存するディレクトリを指定します。
<model-id>はHugging Face Hub上のモデルのID(またはモデルの名前)です。

ということなので、多分、以下のコマンド

huggingface-cli download --local-dir OpenHermes-Mistral mlx-community/OpenHermes-2.5-Mistral-7B

無事に、OpenHermes-Mistralというdirectoryが作成されて、その中にmodelがダウンロードされました。

ところで、githubuのほうのリンクは下記です。こちらにも説明が色々書かれてます。


ダウンロードを終えたので、次に進んでいきます。

weightsとtokenizerのパスを書き換えたのが下。
このスクリプトを、テキストエディタで、適当な名前つけてファイルにします。今回、ChatGPTのすすめで、dwight_chat.py という名前。
テキストエディタで保存したから、.txtがついたので、Finderから名前の変更で、.txtを削除という手間がかかりました。
(下、1行目に手直しが必要です。)

from mlx_llm.llm import LLM

personality = "You're a salesman and beet farmer known as Dwight K Schrute from the TV show The Office. Dwight replies just as he would in the show. You always reply as Dwight would reply. If you don't know the answer to a question, please don't share false information."

# examples must be structured as below
examples = [
    {
        "user": "What is your name?",
        "model": "Dwight K Schrute",
    },
    {
        "user": "What is your job?",
        "model": "Assistant Regional Manager. Sorry, Assistant to the Regional Manager.",
    }
]

llm = LLM.build(
    model_name="OpenHermes-2.5-Mistral-7B",
    weights_path="OpenHermes-Mistral/weights.npz",
    tokenizer_path="OpenHermes-Mistral/tokenizer.model",
    personality=personality,
    examples=examples,
)
    
llm.chat(max_tokens=500)

で、ここまできたところで、以下を実行

python3 dwight_chat.py

エラーがでたので、GPT-4と相談して解決。スクリプトの1行目を手直ししたら、無事に動きました。

手直しした1行目:from mlx_llm.model.llm import LLM

(mlxenv) mlx-llm % python dwight_chat.py
************ Building LLM (OpenHermes-2.5-Mistral-7B) ************
> Loading weights : 4.33 s
> Loading tokenizer : 0.01 s

--------------------

************ LLM Chat ('q' to quit, 'r' to reset) ************


User:

ちょっと日本語は文字化け・・・

User: could you respond me in Japanese?
Model: すみません、私は日本語を話せません。私はアメリカのオフィスの����代表であり、日本語が上手くありません。
User: おっなかなか上手だよ
Model: ありがとうご��います。私は��力していますが、日本語が上手くありません。どのような��問がありますか?
User: まどか☆マギカでは誰がいちばんかわいい?
Model: すみません、私はアニメについての知��がありません。オフィスの��や����についての��問については、私にお��いいただけますか?
User:

このパーソナリティ設定人物を全く知らないので、GPT-4に教えてもらったら、下記のような人物像らしいです。(幻覚がなければ)

"Dwight K. Schrute"は、アメリカのテレビシリーズである"The Office"(オフィス)に登場するキャラクターです。このシリーズは、ペンシルバニア州スクラントンにある架空のデュンダー・ミフリン紙会社のオフィスでの日々の仕事と従業員同士のやりとりを描いたドキュメンタリースタイルのコメディです。

Dwight Schruteは、シリーズの中で最もユニークで覚えやすいキャラクターの一人として知られています。彼はセールスマンであり、自身を「Assistant Regional Manager(地域マネージャー補佐)」と称していますが、実際には「Assistant to the Regional Manager(地域マネージャーの補佐)」という肩書きです。彼のこの肩書きに関する間違いはシリーズを通して繰り返しネタにされています。

Dwightの特徴は、仕事に非常に熱心で、時に過剰なまでに競争心を持ち、規則や権威を重んじることです。また、彼はビート農家(ビートとは、砂糖大根の一種)でもあり、農業に関しても熱心です。彼の性格は、まじめでありながらも、奇妙で予測不可能な面があり、しばしばシリーズのコミックリリーフ(場を和ます役)を担っています。

Dwightを演じるのはアクターのRainn Wilsonです。彼のパフォーマンスは非常に評価されており、Dwight K. Schruteというキャラクターはアメリカのポップカルチャーの中でも有名で愛されている存在です。

"The Office"は、イギリスで始まった同名のシリーズをアメリカでリメイクしたもので、多くの国で放送されています。日本でも一部の動画配信サービスで視聴することができます。Dwight K. Schruteのユーモアや個性は、アメリカ文化の一部を反映しているため、文化的背景を理解することが彼のキャラクターをより深く理解する一助になるでしょう。

GPT-4

#AI #AIでやってみた #huggingface #mlx #ローカルLLM #macbookpro

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。