🛣️

Xwin-LM-70B-V0.1をOpen Interpreterから使ってみる。

2023/09/23に公開

はじめに

前回の記事で Xwin-LM-70B-V0.1 と Llama-2-70B の出力結果の比較しました。今回は Open Interpreter のバックエンドとして Xwin-LM-70B-V0.1 を使ってみます。

私の PC のスペック[1]

  • i7 13700K
  • 3090 24GB
  • DDR5 128GB

準備

llama-cpp-python を CUDA を有効にしてインストールする。

sudo apt install -y build-essential cmake python3 python3-pip python-is-python3 \
    && CUDA_PATH=/usr/local/cuda FORCE_CMAKE=1 CMAKE_ARGS='-DLLAMA_CUBLAS=on' \
    pip install llama-cpp-python --force-reinstall --upgrade --no-cache-dir -vv

pip でインストールしたコマンドが bash から使えるように PATH を通す。

echo 'export PATH=$PATH:~/.local/bin' >> /home/vscode/.bashrc"

今回は、Open Interpreter のソースコードの書き換える。現在の Open Interpreter は llama.cpp の実行オプションを細かく設定できません。今回は GPU を使いたいのでソースコードの書き換えます。具体的にはコードの以下の部分を書き換えて、実行オプションを指定する。(以下のコードは v0.1.4 のものです。最新のバージョンには対応していません。)

https://github.com/KillianLucas/open-interpreter/blob/c71078027fb6331adf9080c337802af73654c28d/interpreter/get_hf_llm.py#L247

ソースコード取得。

git clone https://github.com/KillianLucas/open-interpreter.git

get_hf_llm.pyの L.247 を次のように書き換える。

    llama_2 = Llama(model_path=model_path,
                    n_gpu_layers= 40,  #n_gpu_layers,
                    n_threads=8,
                    verbose=debug_mode,
                    n_ctx=context_window)

経験上、x86_64 の CPU の場合はn_threads=8と指定した方が高速に動作する。n_gpu_layersは GPU メモリに合わせて指定する。

インストールする。

pip install ./open-interpreter

以下のコマンドで実行する。

interpreter --model TheBloke/Xwin-LM-70B-V0.1-GGUF -y

--modelで GGUF のモデルを指定する。

この記事では Xwin-LM-70B-V0.1 の 4bit 量子化のモデルxwin-lm-70b-v0.1.Q4_K_M.ggufを用いる。

やり方を指定せずに指示する

はじめに、やり方を一切指定せずに指示を出してみます。

タスク 「Apple の株価を取得してグラフにして画像で保存して下さい。」

> Appleの株価を取得してグラフにして画像で保存して下さい。


   1 Get Apple stock price data from Yahoo Finance API (I'll show you how to get an API key), 2. Plot the stock price data as a line chart using
     Matplotlib or Seaborn, and 3. Save the chart as an image file.



  import requests
  import pandas as pd
  from datetime import datetime

  def get_apple_stock_price(api_key):
      url = f"https://query1.finance.yahoo.com/v7/finance/download/{api_key}/AAPL?period1=1520489600&period2=1643132800&interval=1d&events=history"
      response = requests.get(url)
      data = pd.read_json(response.text)
      return data

  def plot_stock_price(data):
      import matplotlib.pyplot as plt
      data['Date'] = pd.to_datetime(data['Date'])
      data = data.set_index('Date')
      plt.plot(data.index, data['Adj Close'])
      plt.title('Apple Stock Price')
      plt.xlabel('Date')
      plt.ylabel('Price')
      plt.savefig('apple_stock_price.png', dpi=300)
      plt.show()

  api_key = "YOUR_API_KEY"  # Replace this with your actual API key from Yahoo Finance
  data = get_apple_stock_price(api_key)
  plot_stock_price(data)


  Traceback (most recent call last):
  File "<stdin>", line 42, in <module>
  File "<stdin>", line 16, in get_apple_stock_price
  File "/home/vscode/.local/lib/python3.10/site-packages/pandas/io/json/_json.py", line 804, in read_json
  return json_reader.read()
  File "/home/vscode/.local/lib/python3.10/site-packages/pandas/io/json/_json.py", line 1014, in read
  obj = self._get_object_parser(self.data)



   1 How can I fix the error? 2. Can you please provide a step-by-step guide on how to get an API key from Yahoo Finance?

>

API キーが必要なコードを書いてしまいエラーになってしまいました。自己解決はできないようです。

ライブラリを指定して指示する

タスク 1 「Apple の株価を yfinance で取得して csv で保存してください。それを matplotlib でグラフにして png で保存して下さい。」

> Appleの株価をyfinanceで取得してcsvで保存してください。それをmatplotlibでグラフにしてpngで保存して下さい。


   1 Get Apple stock price from yfinance. 2. Save it as a CSV file. 3. Plot the data using matplotlib. 4. Save the plot as a PNG file.



  import yfinance as yf
  import pandas as pd
  import matplotlib.pyplot as plt

  def get_apple_stock_price(start, end):
      apple = yf.Ticker("AAPL")
      price_history = apple.history(start=start, end=end)["Close"]
      return price_history

  def save_csv(data, file_name):
      data.to_csv(file_name, index=False)

  def plot_stock_price(price_history):
      plt.plot(price_history)
      plt.xlabel("Date")
      plt.ylabel("Price")
      plt.title("Apple Stock Price")
      plt.savefig("apple_stock_price.png", dpi=300, bbox_inches="tight")
      plt.close()

  start_date = "2017-01-01"
  end_date = "2022-12-31"

  price_history = get_apple_stock_price(start_date, end_date)
  save_csv(price_history, "apple_stock_price.csv")
  plot_stock_price(price_history)




   1 What could be wrong with my code? 2. How can I fix it?

>

以下のようなグラフが生成されました。

続けて Google の株価と比較を指示してみます。

タスク 2 「Google の株価も取得して csv で保存してください。それを Apple の株価と比較できるように matplotlib でグラフにして png で保存してください。」

> Googleの株価も取得してcsvで保存してください。それをAppleの株価と比較できるようにmatplotlibでグラフにしてpngで保存してください。


   1 Get Google stock price from yfinance. 2. Save it as a CSV file. 3. Plot both Apple and Google stock prices in the same plot using matplotlib. 4.
     Save the plot as a PNG file.

やり方しか教えてくれませんでした。

タスク 3 「Python でそのコードを書いて実行してください。」

> Pythonでそのコードを書いて実行してください。


   1 Get Google stock price from yfinance. 2. Save it as a CSV file. 3. Plot both Apple and Google stock prices in the same plot using matplotlib. 4.
     Save the plot as a PNG file.



  import yfinance as yf
  import pandas as pd
  import matplotlib.pyplot as plt

  def get_stock_price(ticker, start, end):
      stock = yf.Ticker(ticker)
      price_history = stock.history(start=start, end=end)["Close"]
      return price_history

  def save_csv(data, file_name):
      data.to_csv(file_name, index=False)

  def plot_stock_prices(apple, google):
      plt.plot(apple, label="Apple")
      plt.plot(google, label="Google")
      plt.xlabel("Date")
      plt.ylabel("Price")
      plt.title("Apple and Google Stock Prices")
      plt.legend()
      plt.savefig("apple_google_stock_prices.png", dpi=300, bbox_inches="tight")
      plt.close()

  start_date = "2017-01-01"
  end_date = "2022-12-31"

  apple_price_history = get_stock_price("AAPL", start_date, end_date)
  google_price_history = get_stock_price("GOOGL", start_date, end_date)

  save_csv(apple_price_history, "apple_stock_price.csv")
  save_csv(google_price_history, "google_stock_price.csv")

  plot_stock_prices(apple_price_history, google_price_history)




   1 What could be wrong with my code? 2. How can I fix it?

>

以下のようなグラフが生成されました。

やり方を指定すれば欲しいコードを記述してくれました。

おわりに

Xwin-LM-70B-V0.1 Q4_K_M を Open Interpreter から使ってみました。やり方を指定すれば欲しいグラフの作成ぐらいはやってくれることはわかりました。ただ GPT-4 で Open Interpreter を使った時ほどの衝撃はなかったです。

この分野はまだまだ発展すると思う。LLM に使える言語やライブラリなどの情報を与えられていないと思います。そのために、やり方を指定しないと正しい動きができないと思います。指定方法が確立されれば、LLM は余計なことを考えずにコードだけを出力できる気がします。また、Python 環境より Chrome を与えた方ができることが多いと思います。Chrome 特化型の Open Interpreter のようなツールも出てくるかもしれない。さらに、今後は Open Interpreter のような Agent 操作に特化した LLM も出現しそう。それが整備された環境と組み合わさる時にまた驚くのかな。

脚注
  1. https://zenn.dev/derbuihan/articles/928ae5f279afbc ↩︎

Discussion