JOURNALについて

データアナリティクスラボ株式会社では、ITやデータサイエンスに関する技術の研究活動を行っています。このブログでは、研究活動で得られた知見や検証結果についての情報を発信します。

本ブログで提供される情報は、可能な限り正確かつ最新の情報であるように努めますが、必ずしもその正確性を保証することはできません。場合によっては誤情報が含まれたり、最新の情報ではない可能性もあります。予めご了承いただけますようお願い申し上げます。

journal

Open Interpreterの動かし方

はじめに

データソリューション事業部の宮澤です。

LLMを活用したプロダクトが増えてくる中で、先日Open-Interpreter1というツールが公開されました。Open-Interpreterとは、自然言語の指示に対してコードを生成し、それをローカルで動かすことができるツールです。ChatGPT Plusで提供されているCode Interpreterのローカル版とイメージするとわかりやすいかと思います。

今回はそんなOpen-Interpreterを実際に動かしてみたので、セットアップ手順について説明していきます。

使用したのPCの環境

  • 機器:Macbook Air
  • チップ:Apple M1(Apple Silicon)
  • コア数:8
  • メモリ:8GB

環境構築

まずはじめに注意しておくべきこととして、Open-Interpreterはユーザーの指示を実現するために、必要なライブラリ等を積極的にインストールしていくようなコードを生成します。 そのため、自身のPCの環境を管理するために、仮想環境を作っておくことは必須条件と言えます。このことを踏まえて、今回はいくつかの方法で仮想環境を準備してOpen-Interpreterをセットアップしていきました。

今回は2つの方法でセットアップを行いました。

  1. Docker上で作った仮想環境を使う方法
  2. MacOS上で作った仮想環境を使う方法


後述しますが、本記事では1番ではOpenAI APIを使用し、2番でCode Llama2を使用することとしています。(OpenAI APIを使う方法は上記のどちらでも動かすことができました。)

事前準備

  • Dockerを使う場合はDocker Desktopをインストールしておいてください。

  • OpenAI APIを使う場合はAPIキーを取得しておいてください。
    ※Open-Interpreterを動かすだけならCode Llamaというローカルで動くモデルが無料で使えますが、ある程度の精度で動かしてみたい人はAPIを使うのがよいと思います。ただしAPIは有料なので注意してください。

  • ローカルに適当な作業用フォルダを作っておいてください。

Docker上で作った仮想環境を使う方法

全体の流れとしては、Dockerで作ったUbuntu環境の中でminiforgeを使って仮想環境を作り、その中でOpen-Interpreterを動かす形になります。

手順

1. Dockerfileの作成

まずはDockerイメージを作るためのDockerfileを作ります。 miniforgeのインストールや仮想環境の作成、さらにopen-interpreterのインストールもここに書いておきます。

2. Dockerイメージの作成

上で作ったDockerfileを使ってDockerイメージを作ります。
あらかじめDockerfileを配置したディレクトリに移動して以下のコマンドを実行します。
ここでは「open_interpreter_image」という名前でDockerイメージを作りました。

docker build -t open_interpreter_image .

3. OpenAI APIキーを.envファイルに記述して配置する

作業用フォルダに、OpenAI APIキーを環境変数として記述した.envファイルを配置しておきます。ここではDockerfileと同じディレクトリに配置しました。
この作業の目的は、Open-Interpreterの起動時に自動でAPIキーを読み込ませることで、毎回キーを打つ必要をなくすことです。(OpenAI APIを使わない場合はスキップしてください。)

.envファイルの中身(ご自身のAPIキーに書き換えてください)

OPENAI_API_KEY={your_api_key}

4. Dockerコンテナの作成

上で作ったDockerイメージをもとにコンテナを作成します。 作業用のディレクトリに移動してから以下のコマンドを実行することで、コンテナ内とローカルの作業フォルダをマウントしておきます。また、上で作った.envファイルを読み込むように指示を書いておきます。現在のディレクトリの一つ上の階層に.envファイルがあるので、「../.env」というパスの指定になっています。

なお、ここではコンテナ名を「test1」と指定しています。

コンテナの作成
OpenAI APIを使う場合(.envを読み込むように設定します。)

docker run -it --name test1 --env-file ../.env -v "$(pwd)":/workspace open_interpreter_image

OpenAI APIを使わない場合(.envの設定は必要ありません。)

docker run -it --name test1 -v "$(pwd)":/workspace open_interpreter_image

再度コンテナを起動する場合

docker start test1

再度コンテナに入る場合

docker exec -it test1 /bin/bash

コンテナを停止する場合

docker stop test1

5. 仮想環境をアクティブにする

前の手順でコンテナを作成し、コンテナ内に入ることができました。
Dockerfileにはあらかじめ仮想環境を作るコマンドも含めていたため、コンテナ内にはすでに「open_env」という仮想環境ができています。これをアクティブにします。

source /root/miniforge/bin/activate open_env

6. Open Interpreterを動かす

ここまできたらOpen-Interpreterを動かす準備はできました。Dockerfileにあらかじめopen-Interpreterを仮想環境(open_env)に入れるようにコマンドを記述をしておいたため、ライブラリのインストールは完了しています。ターミナル上で以下のコマンドを実行すれば動かすことができます。

ここで、どのLLMを使うかによって実行コマンドが異なります。
gpt-4とgpt-3.5 turboを使う場合はOpenAI API経由で実行され、Code Llamaを使う場合はモデルがローカルにダウンロードされます。(gpt-4のAPIは、OpenAI APIで一度でも支払いをしたことがあるユーザーにのみ解放されているので、使用権がなければエラーになります。)

実行コマンド

gpr-4のAPIを使う場合

interpreter

gpt-3.5 turboのAPIを使う場合

interpreter --fast

Code Llamaを使う場合

interpreter --local

コードの実行を常に許可する設定

Open-Interpreterのデフォルトの設定では、生成したコードを実行してよいか毎回ユーザーへ確認するようになっています。この工程を省いてすべて許可したい場合は以下のように設定します。(ある程度の挙動が掴めるまではコードを確認することをおすすめします。)

interpreter -y 

もしくは

interpreter.auto_run = True

7. 起動後の使い方

起動ができたらターミナル上で自由に指示を出すことができます。
試しに以下のような指示を出してみました。
ここではOpenAI APIでgpt-3.5 turboを使用しています。

現在いるディレクトリの中にsample_data.csvという、日付、商品名、売上の3つのカラムを持った100行のサンプルデータを作成して下さい。なお、売上はトレンドがありつつもランダムな値を取るようにして下さい。

まず初めに手順を提示してきました。

まず、Pythonを使用してサンプルデータを作成します。次の手順で進めます。        
                                                                                
   1 pandasパッケージをインストールします(すでにインストールされている         
     場合はスキップします)。                                                   
   2 pandasを使用してサンプルデータを作成します。                               
   3 作成したデータをCSVファイルとして保存します。                              
                                                                                
  それでは、手順ごとにコードを実行していきましょう。まずはpandasパッケージをイ  
  ンストールします。

これを許可します。

このあと生成されたコードは省略しますが、手順ごとにコードが生成されていき、一つずつ許可をしていきました。最終的に以下のようなCSVファイルが出力されました。

指示した通りにデータが生成されていることが確認できました。

OpenAI APIの利用状況の確認方法

OpenAI APIの利用を確認する方法を記載しておきます。

上述した通りOpenAI APIは有料であり、トークン数に応じた従量課金制となっています。そのため、ご自身の利用料を都度チェックしておくことをおすすめします。APIの利用状況はサイトで確認が可能です。

https://platform.openai.com/account/usage

OpenAI APIを使用する場合の注意点

  • OpenAI APIについては、APIの支払いを一度以上したことがあるユーザーに対してGPT-4のAPIが付与されているため、付与されていない場合はエラーになります。その場合は”Interpreter —fast”とすることでgpt-3.5 turboを使うことができます。

  • ローカルにあるデータを読み込ませたりできる分、使い方によってはトークンの消費量が非常に多くなります。APIの利用料に注意するようにしてください。

セットアップで躓いた点

  • Ubuntu上にminiforgeを入れる部分で”Could not open ‘/lib64/ld-linux-x86-64.so.2’”というエラーが出ました。これはインストーラがIntelのマイクロプロセッサ向けであり、Apple M1に対応していないことが原因のようです。ここではDockerfileの中で”FROM –platform=linux/amd64”という記述をしておくことで解決できました。

  • コンテナを作成する際に”WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested”と警告が出てきました。内容の通り、Dockerで作ったUbuntuの環境とホストであるM1 Macの環境が異なっていることが原因と考えられます。

  • Code Llama使う場合はllama-cpp-pythonのインストールが必要ですが、ここでエラーになりました。あらかじめ必要な環境設定があったようですが、ここではOpenAI APIでの利用を確認できたのでCode Llamaは使いませんでした。(Code Llamaを使う方法は本記事の後半で説明しています。)

  • Open-Interpreterの処理の中でpandasをインストールするために”!pip install pandas”の実行を許可しましたが、エラーになり実行できませんでした。Pythonインタープリター内でpipコマンドは使えないことが原因のようで、いったんOpen-Interpreterを閉じて仮想環境内でpip install pandasを実行することは可能でした。GithubのIssue3で同じ問題が挙がっていたので引き続き原因と対策を調査します。(後述の手順で行っているようにMacOS上に作ったconda環境では実行した場合はエラーなく実行できました。)

  • Open-Interpreterが一部の指示には回答するが、そのほかの質問には何も返答してこないということがありました。こちらもGithubのissue4に同じ問題が挙がっていました。”pip install litellm –upgrade”をすることで解決しました。

MacOS上で作った仮想環境を使う方法

次は、Dockerは使わずにMacOS上で同じようにminiforgeを使って仮想環境を作り、その中でOpen-Interpreterを動かします。

手順

1. miniforgeをインストールする

こちらは省略します。ご自身でWebサイト等をご参照ください。

OpenAI APIを使う場合

miniforgeがインストールできたら仮想環境を作ります。

conda create open_env

このあとは本記事の前半で説明した「Docker上で作った仮想環境使う方法」の「5. 仮想環境をアクティブにする」以降をそのまま実行すれば同じようにOpen-Interpreterを起動できます。
(こちらの方法でOpenAI APIを使う場合、環境変数にAPIキーを設定しておけば同じように毎回APIキーを打たずに動かすことができます。)

Code Llamaを使う場合

ここからは、M1 MacでCode Llamaを使うためのセットアップ手順を説明します。 引き続き2番以降の手順を進めていきます。

実行するにあたっては以下の記事を参考にさせていただきました。

https://note.com/alexweberk/n/n250db705b06e

2. xcodeが入っていることを確認

以下のコマンドでxcode5が入っていることを確認します。
xcodeはAppleが提供している統合開発環境です。

xcode-select -p

ここでは既に入っていたのでそのまま進みました。入っていない場合はインストールしてください。ここも別のWebサイト等に情報が多く存在するため、具体的な方法は省略します。

3. 仮想環境の作成とアクティベート

参考記事でpython3.11を使っていたため、同じくpython3.11で仮想環境を作りました。

conda create -n open_env python=3.11

仮想環境をアクティブにします。

conda activate open_env

4. llama-cpp-pythonのインストール

llama-cpp-pythonはPythonでLlama.cpp6を使うためのライブラリです。 Llama.cppはC言語で記述されたLLMのランタイムであり、M1 MacでLLaMAモデルを動かすのに役立ちます。ここでMetal7を使う設定をしたllama-cpp-pythonを入れる必要があります。

MetalとはM1やM2のMacでGPUにアクセスすることができるコンピュータグラフィックスAPIです。今回はCode LlamaをGPUを使って動かしたいため、Metalを使えるようにしておきます。

以下のコマンドでMetalを使えるllama-cpp-pythonをインストールします。(すでにllama-cpp-pythonが入っている場合はいったんアンインストールして再度入れるようにしています。)

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]'

5. Open Interpreterをインストールする

仮想環境にopen-interpreterをインストールします。

pip install open-interpreter

6. Code Llamaのモデルを選択する

ここではOpen-Interpreterで使うCode Llamaのモデルを選択をします。
Code Llamaを使う場合は以下のコマンドを実行します。

interpreter --local

実行するとモデルを選ぶように指示されます。

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 (smaller is faster, larger is more capable): Small | Size: 2.6 GB, Estimated RAM usage: 5.1 GB
 > Small | Size: 2.6 GB, Estimated RAM usage: 5.1 GB
   Medium | Size: 3.8 GB, Estimated RAM usage: 6.3 GB
   Large | Size: 6.7 GB, Estimated RAM usage: 9.2 GB
   See More

モデルを選択し、選んだモデルがローカルになければダウンロードされます。
ここでは7BのSmallを選択しました。

Downloading (…)b-instruct.Q2_K.gguf: 100%
Model found at /Users/{user_name}/Library/Application Support/Open Interpreter/models/codellama-7b-instruct.Q2_K.gguf

▌ Model set to TheBloke/CodeLlama-7B-Instruct-GGUF

Open Interpreter will require approval before running code. Use interpreter -y to bypass this.

モデルをダウンロードできれば準備が完了し、対話画面となります。

7. 起動後の使い方

使い方はOpenAI APIを使う場合と同じです。
ここでも同じく以下のような指示を出してみました。

現在いるディレクトリの中にsample_data.csvという、日付、商品名、売上の3つのカラムを持った100行のサンプルデータを作成して下さい。なお、売上はトレンドがありつつもランダムな値を取るようにして下さい。

返答として以下のコードが返ってきました。

import pandas as pd                                                                                                 
import numpy as np                                                                                                  
                                                                                                                      
  # create a sample dataframe with 100 rows                                                                           
  df = pd.DataFrame({'date': pd.date_range('2022-01-01', periods=100, freq='D'),                                      
                     'product name': ['Product A'] * 50 + ['Product B'] * 50,                                         
                     'sales': np.random.randint(100, size=100)})                                                      
                                                                                                                      
  # add a trend to the sales column                                                                                   
  df['sales'] = df['sales'].rolling(window=2).mean() + np.random.normal(0, 5, size=100)                               
                                                                                                                      
  print(df.head())

実行を許可しましたが、コードを見て分かるように、サンプルデータは作成しているようですが、CSVファイルの出力はされませんでした。

また、GPUが使用されているかをアクティビティモニタから確認したところ、問題なく使用されていることがわかりました。

Code Llamaを使用する場合の注意点

  • 結果から分かるように、最小の7B-smallのモデルでは、OpenAI APIを使うよりも精度が低いと考えられます。34Bなど大きなモデルであれば精度が上がる可能性はあります。

  • 13Bや34Bモデルでも試してみたところ、モデルのダウンロードはできましたが、実行するとリソース不足によるエラーが返ってきました。全体的に処理が非常に重くなったため、大きなモデルは8コアのMacbookでは処理しきれず、使用は難しいと考えられました。

まとめ

今回はOpen-Interpreterのセットアップ手順を紹介しました。

環境を作ってしまえばライブラリをインストールして実行するだけなので手軽に動かすことができました。OpenAI APIのgpt-3.5 turboとCode Llamaではやはり精度と速度はOpenAI APIの方が優れていますが、Code Llamaが無料でかつローカル上で完結して使えることを考えると、今後より小さく高精度なモデルが出てくることを期待したいです。

また、Open-Interpreterを使ってみた感想としては、エラーに対して自身で解決策を探して実行するという点で、これまでになかった自律性を感じました。さらに、ローカルにあるファイルを使うこともできるため、私のようなデータサイエンティストが行う基礎分析を指示するなど、様々な活用が可能であると考えられます。具体的にどのような活用の可能性があるのかを引き続き探っていきたいと思います。





1https://github.com/KillianLucas/open-interpreter
本記事では一部「Open-Interpreter」と表記させていただいています。(正確には「Open Interpreter」です。)
本文へ戻る

2https://ai.meta.com/blog/code-llama-large-language-model-coding/
本文へ戻る

3https://github.com/KillianLucas/open-interpreter/issues/272[/](https://ai.meta.com/blog/code-llama-large-language-model-coding/)
本文へ戻る

4https://github.com/KillianLucas/open-interpreter/issues/391
本文へ戻る

5https://developer.apple.com/jp/xcode/
本文へ戻る

6https://github.com/ggerganov/llama.cpp
本文へ戻る

7https://developer.apple.com/metal/
本文へ戻る

参考

本記事の執筆にあたっては、以下の記事を参考にさせていただきました。

オウンドメディアも運営しています