CodeLlamaをWindows11で動かす方法

CodeLlamaをWindowsで動かす方法 Llama
CodeLlamaをWindowsで動かす方法

CodeLlamaはMetaが開発した「コード生成特化型」のLLMです。

Llama 2がベースになっています。

CodeLlamaをファインチューニングしたモデルは、GPT-4の性能を上回るという報告もあります。

CodeLlamaには3種類のモデルがあります。

  1. Code Llama … 基本のモデル。コードを補完する。
  2. Code Llama – Python … Python特化モデル。コードを補完する。
  3. Code Llama – Instruct … 自然言語の指示に従ってコードを生成するモデル

それぞれのモデルに7B、13B、34Bのパラメータを持つバージョンがあります。

この記事ではCodeLlamaをWindows11で動かす方法を紹介します。

※Llama 2をWindowsで動かす方法は「すぐできる!Llama 2をWindowsのローカル環境で使う方法」をご覧ください。

実行環境

この記事では以下の環境で動作を確認しました。

  • Python 3.10.9
  • Windows 11 Home
  • llama-cpp-python 0.1.78

前提

CodeLlamaのモデルを利用するためにLlama.cppを使います。

Llama.cppはC言語で実装されたLlamaの実行環境でMacOS、Linux、WindowsのいずれのOSでもLlamaを動かすことができる優れものです。

C言語で実装されているため高速で動作し、GPUがないマシンでも動作します。

CodeLlamaのダウンロード

はじめにHugging FaceのページからCodeLlamaの7Bモデルをダウンロードします。

Llama.cppを使うためGGML形式のモデルを選びます。

codellama-7b.ggmlv3.Q3_K_M.bin · TheBloke/CodeLlama-7B-GGML at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

ダウンロードしたらわかりやすいフォルダに置いておきましょう。

ここではCドライブ直下に「CodeLlama」というフォルダを作ってその中に入れました。

必要なライブラリをインストールする

次にLlama.cppのPython版のライブラリをインストールします。

pipでインストールできます。

pip install llama-cpp-python

すでに「llama-cpp-python」をインストール済みの場合は、最新版にアップデートします。

※llama-cpp-pythonのバージョンが0.1.80の場合にAssertionErrorが発生し動作しませんでした。以下のバージョンでは動作しました。

pip install -U llama-cpp-python==0.1.78

参考: https://github.com/abetlen/llama-cpp-python/issues/643

CodeLlamaを使う

あとはPythonでコードを書いて実行するだけです。

今回は以下のコードを用意しました。

プロンプト部分(prompt)とmodel_pathは自分の環境に合わせて書き換えてください。

from llama_cpp import Llama

prompt ='def generate_fibonacci(n):\n' # フィボナッチ数列を生成する関数を補完させる

llm = Llama(model_path="C:\CodeLlama\codellama-7b.ggmlv3.Q3_K_M.bin")
output = llm(
    prompt,
    max_tokens=500,
    echo=False
)
print(output['choices'][0]['text'])

ここではフィボナッチ数列を生成するPythonコードを補完させています。

CodeLlamaの基本モデルはコードを補完するモデルなので、プロンプトを関数の書き出しにしています。

先ほどモデルを配置したフォルダに、上記のコードをexample.pyという名前で保存します。

コマンドプロンプトでこれを実行すると、以下のような回答が得られます。

def generate_fibonacci(n): # プロンプト
    if n == 0
        return 0

    if n == 1
        return 1



    fibs = []
    i = 0


    while len(fibs) < n + 1:

        if len(fibs) <= 2:
            fib_value = 1









        else:





            new_value = fibs[i] + fibs[i - 1]



            i += 1




            fib_value = new_value






        fibs.append(fib_value)

    return fibs[-1]

今回使用した基本モデル(7B)では、精度が悪く無駄な改行が出力されたり「:」が抜けているなど、問題のあるコードが生成されました。

7Bでは使い物にはならなそうです。13Bでも試して比較してみましょう。

CodeLlama 13B を試す

基本モデルのパラメータ数を増やした13Bモデルでも試してみます。

codellama-13b.ggmlv3.Q5_K_M.bin · TheBloke/CodeLlama-13B-GGML at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

上記のモデルをダウンロードした後、同じ場所に配置して、以下のようにコードを書きかえます。

from llama_cpp import Llama

prompt ='def generate_fibonacci(n):\n' # フィボナッチ数列を生成する関数を補完させる

llm = Llama(model_path="c:\CodeLlama\codellama-13b.ggmlv3.Q5_K_M.bin")
output = llm(
    prompt,
    max_tokens=1000
)
print(output['choices'][0]['text'])

出力が以下です。

無駄な改行がなくなって、ぱっと見はきれいなコードになりました。

def generate_fibonacci(n): # プロンプト
  if n == 0:
        return []

    # Base case
    if n == 1:
        return [1]

    prev = 1
    current = 2
    output = [prev, current]
    for _ in range(n-2)):
        temp_next = prev + current
        prev = current
        current = temp_next

    return output

ただし、依然としてコードは正しくありません。

プロンプトの改良も試みましたが、実用的ではなさそうでした。

Code Llama – Pythonを試す

続いてPythonに特化したコード生成モデルである Code Llama – Python を試してみます。

モデルが変わるだけでやることはこれまでと同じです。

codellama-13b-python.ggmlv3.Q5_K_M.bin · TheBloke/CodeLlama-13B-Python-GGML at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

以下のようなPythonコードを書きます。

from llama_cpp import Llama

prompt ='def generate_fibonacci(n):\n' 

llm = Llama(model_path="c:\CodeLlama\codellama-13b-python.ggmlv3.Q5_K_M.bin")
output = llm(
    prompt,
    max_tokens=500
)
print(output['choices'][0]['text'])

出力は以下のようになりました。

Python特化のモデルを使った場合でも、13Bモデルでは微妙な結果でした。

def generate_fibonacci(n): # プロンプト
    a = 0
    b = 1
    while a < n:
        print(a, end=','))
            (c) 200.

            )
        (
            a
                ,
                    b
                        =
                            a
                                +
                                    b
            )
        print(b, end=','))
            (c) 200.

Code Llama – Instructを試す

最後にCode Llama – Instructも試しておきます。

こちらはコードを補完するモデルではなく、自然言語の指示に従ってコードを生成するモデルです。

codellama-13b-instruct.ggmlv3.Q5_K_M.bin · TheBloke/CodeLlama-13B-Instruct-GGML at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

モデルに合わせてプロンプトを書き換えます。

from llama_cpp import Llama

prompt ='Generate the Fibonacci Sequence in Python' # フィボナッチ数列を生成させる

llm = Llama(model_path="c:\CodeLlama\codellama-13b-instruct.ggmlv3.Q5_K_M.bin")
output = llm(
    prompt,
    max_tokens=1000
)
print(output['choices'][0]['text'])

指示モデルでも13Bではコード生成はうまくいかず、英文の説明のみが出力されました。

def generate_fibonacci(n): # プロンプト
The Fibonacci sequence is a sequence of numbers where each number is the sum of the two preceding numbers: 1, 1, 2, 3, 5, ... Starting with zero as its first two terms and extending it to include all positive integers as its term. It has many interesting properties such as the relationship between the sum of the squares of any two consecutive terms in the sequence with the square of the sum of those same terms which is also equal to the square of the difference between those two consecutive terms in the sequence.

まとめ

この記事ではCodeLlamaをWindowsで動かす方法を解説しました。

CodeLlamaのコード生成の品質は7B~13Bのモデルでは実用的に使えるものではなさそうでしたが、34Bモデルやファインチューニング済みのモデルであれば、よい結果になるかもしれません。

今後試していきます。

記事の内容にわからないことがある方は以下のアカウントに気軽にDMしてください!

@sti320a

また、最新の技術の活用方法など役に立つツイートを心がけているので、ぜひフォローしてもらえると嬉しいです!

タイトルとURLをコピーしました