見出し画像

OpenInterpreter をMetalを使ったローカルのCode Llamaで使ってみた

OpenInterpreter はデフォルトだと GPT-4 が使われるが、ローカルの Code Llama を使うこともできるということで、
試しに設定して使ってみました。
設定をする上で何点かつまづいたので、解決に繋がったものをメモします。

今回使ったハードウェア環境は、M1 Macbook Pro 16GB です。

ローカルの Code Llama を使うには

OpenInterpreter は、ローカルの Code Llama を使うことができます。
ローカルの Code Llama を使うには、以下のようにします。

interpreter --local

使いたいモデルのパラーメータを聞かれるので、今回は「7B」「Medium」「GPU あり」を選択しました。

Open Interpreter will use Code Llama for local execution. Use your arrow keys to set up the model.

[?] Parameter count (smaller is faster, larger is more capable): 7B
 > 7B
   13B
   34B

[?] Quality (lower is faster, higher is more capable): Medium | Size: 4.24 GB, RAM usage: 6.74 GB
   Low | Size: 3.01 GB, RAM usage: 5.51 GB
 > Medium | Size: 4.24 GB, RAM usage: 6.74 GB
   High | Size: 7.16 GB, RAM usage: 9.66 GB

[?] Use GPU? (Large models might crash on GPU, but will run more quickly) (Y/n): Y


▌ Model set to Code-Llama

Metal の GPU を使うためには

Mac の M1 や M2 チップがある場合、Metal を使うことで、演算を速くすることが出来ます。

ただ、最初上記のコードで設定したにも関わらず、Metal が使われていないようでした。下記に設定の手順を記します。

(Metal の利用状況に関しては Mac の Activity Monitor を開き、「Window > GPU History」 でグラフを確認することが出来ます。)

Metal を使うための設定

ローカルで Code Llama を使う場合、Llama.cpp というライブラリを使う必要が要ります。
結論から言うと、Llama.cpp をインストールする際に、Metal を使うバージョンをダウンロードする必要があり、
その際に昔から Miniconda を使っていると、conda-forge からダウンロードされるバージョンが Metal を使わないバージョンになってしまうようです。

conda env list
# conda environments:
#
                         /Users/alexishida/miniconda3
                         /Users/alexishida/miniconda3/envs/py311
                         /Users/alexishida/miniconda3/envs/py39

このように `miniconda3` と入っていると恐らく Metal を使わないバージョンになってしまうようです。

Metal サポートのない Conda で Llama.cpp の Metal バージョンをインストールしてしまうと、下記のようなエラーが出ます。

Python 3.11.4 (main, Jul  5 2023, 08:41:25) [Clang 14.0.6 ]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from llama_cpp import Llama
zsh: illegal hardware instruction  ipython

最終的に `miniforge3` と入っている状態で動くようになりました。

詳しい手順はこちらにもあるのですが、差分が見落としやすかったので何度かつまづいてしまいました。

具体的な手順

1. Llama.cpp のインストール

Xcode が入っていることを確認後、Miniconda のインストール。この際に Metal サポートされた Conda を入れる必要があるので、
入っていない場合は改めてインストールする必要があります。

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh

手順に従って、インストール。

次に Llama.cpp を pip 経由でパラメーター付きでインストールします。

pip uninstall llama-cpp-python -y
CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install -U llama-cpp-python --no-cache-dir
pip install 'llama-cpp-python[server]'

手順したがって 3.9.16 で環境を作りました。

conda create -n llama python=3.9.16
conda activate llama

うまく行けばこれで Metal を使った Llama.cpp の実行ができるはずです。

2. OpenInterpreter のインストール

OpenInterpreter のインストールは、pip で行います。

pip install open-interpreter

このとき、 python バージョン 3.9.16 で実行したところ、3.10 以上が必要と言われたので、
改めて python 3.11 で環境を作り直しました。

conda create -n py311 python=3.11
conda activate py311
pip install open-interpreter

3. OpenInterpreter の実行

ローカルのモデルで実行します。

interpreter --local -y
Open Interpreter will use Code Llama for local execution. Use your arrow keys to set up the model.

[?] Parameter count (smaller is faster, larger is more capable): 7B
 > 7B
   13B
   34B

[?] Quality (lower is faster, higher is more capable): Medium | Size: 4.24 GB, RAM usage: 6.74 GB
   Low | Size: 3.01 GB, RAM usage: 5.51 GB
 > Medium | Size: 4.24 GB, RAM usage: 6.74 GB
   High | Size: 7.16 GB, RAM usage: 9.66 GB

[?] Use GPU? (Large models might crash on GPU, but will run more quickly) (Y/n): Y


▌ Model set to Code-Llama

モデルが無事ダウンロードされました。

4. Code Llama での生成

フィボナッチ数列を生成するPython関数を作成してください
> フィボナッチ数列を生成するPython関数を作成してください




  def fibonacci(n):
      if n <= 1:
          return n
      else:
          return fibonacci(n-1) + fibonacci(n-2)



  I'll ask what you'd like to do next.

無事ローカルでの生成が出来ました!短い例でしたが、体感の生成スピードが上がった気がします。

無事設定できたわけですが、想像していた通り GPT-4 のように期待通りのアウトプットは中々できません。

> 日経225の価格を2018年から2022年までmatplotlibでplotしてください。

  import matplotlib.pyplot as plt
  import pandas as pd

  # Read data from CSV file
  df = pd.read_csv('日経225.csv')

  # Create a line plot
  plt.plot(df['Date'], df['Close'])

  # Set title and labels
  plt.title('日経225の価格')
  plt.xlabel('年')
  plt.ylabel('円')

  # Show the plot
  plt.show()


  File "<stdin>", line 8, in <module>
  File
  "/Users/alexishida/miniforge3/envs/py311/lib/python3.11/site-packages/pandas/io/parsers/readers.py",
  line 948, in read_csv
  return _read(filepath_or_buffer, kwds)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File
  "/Users/alexishida/miniforge3/envs/py311/lib/python3.11/site-packages/pandas/io/parsers/readers.py",
  line 611, in _read
  parser = TextFileReader(filepath_or_buffer, **kwds)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File
  "/Users/alexishida/miniforge3/envs/py311/lib/python3.11/site-packages/pandas/io/parsers/readers.py",
  line 1448, in __init__
  self._engine = self._make_engine(f, self.engine)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File
  "/Users/alexishida/miniforge3/envs/py311/lib/python3.11/site-packages/pandas/io/parsers/readers.py",
  line 1705, in _make_engine
  self.handles = get_handle(
  ^^^^^^^^^^^
  File "/Users/alexishida/miniforge3/envs/py311/lib/python3.11/site-packages/pandas/io/common.py", line
  863, in get_handle
  handle = open(
  ^^^^^


  it seems that the file "日経225.csv" does not exist in the current working directory.

結論

  • OpenInterpreter はローカルの Code Llama を使うことができます。

  • ただ、Metal を使うためには、Metal サポートされた Conda で Llama.cpp をインストールする必要があります。

  • また、OpenInterpreter のダウンロード時には python 3.10 以上が必要でした。

  • 生成物はモデルが Code Llama だとまだまだ微妙。

以上、お読みいただきありがとうございます。少しでも参考になればと思います。
もし今回の記事が楽しんでいただけたのであれば、noteTwitter でフォローしていただけると嬉しいです。


関連

参考文献


この記事が気に入ったらサポートをしてみませんか?