0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コード生成LLM mistralai/mamba-codestral-7B-v0.1 を試してみた

Last updated at Posted at 2024-07-18

やばいコード生成LLMでてきた

なにがやばいって、7Bクラスで HumanEval 75% ですよ。これは相当な高得点じゃないでしょうか。

このモデルは Transformer モデルではなく Mamba モデルを採用していて、
Transformer ベースの SOTA モデルと同等のパフォーマンスが可能になってそうです。

image.png

ということでお試ししてみました。

お試しした環境

CPU: 12世代 i7
RAM: 64GB
OS: Windows(WSL Ubuntu)
GPU:A5000

動画にもまとめました

お試しした内容を動画にもまとめています

パッケージのインストール

pip install mistral_inference
pip install packaging mamba-ssm causal-conv1d transformers

モデルのダウンロード

まずモデルのページにいって、Permissionを得ます

次に以下のように、コードをつかってダウンロードします。

ここでは Windows PC の Dドライブに落としました。
WSLを使っているので /mnt のように指定しています。

mistral_models_path = Path.home().joinpath('/mnt/d/mistral_models', 'mamba-codestral-7B-v0.1')

mistral_models_path.mkdir(parents=True, exist_ok=True)

snapshot_download(
    repo_id="mistralai/mamba-codestral-7B-v0.1",
    local_dir=mistral_models_path,
    token="ダウンロード許可を得たユーザーのHuggingFaceのトークンをここにいれる"
)

コンソールチャットを実行

mistral_inference パッケージが仮想環境にインストールされていると、以下のように mistral-chat コマンドが使えるようになります。

モデル名を指定して起動します。

mistral-chat /mnt/d/mistral_models/mamba-codestral-7B-v0.1 --instruct --max_tokens 1024

私の環境では、モデル読み込んでプロンプトでるまで 5分くらいかかりました。

お試しした内容

Pythonプログラムを書くよう命令する

「1から1000までのすべての数の和を計算するPythonプログラムを書きなさい。」

mistral-chat /mnt/d/mistral_models/mamba-codestral-7B-v0.1 --instruct --max_tokens 1024
Prompt: Write a Python program to calculate the sum of all numbers from 1 to 1000.
Here is a simple Python program that calculates the sum of all numbers from 1 to 1000:

```python
sum = 0
for i in range(1, 1001):
    sum += i
print(sum)
```

This program uses a for loop to iterate over each number from 1 to 1000. In each iteration, it adds the current number to the sum. After the loop finishes, it prints the sum.
=====================

1から100までのすべての偶数を表示するPython関数を作りなさい

Prompt: Create a Python function that prints all even numbers between 1 and 100.
def print_even_numbers():
    for i in range(1, 101):
        if i % 2 == 0:
            print(i)
=====================

「第10項までのフィボナッチ数列を生成するPythonスクリプトを書きなさい。」

Prompt: Write a Python script to generate the Fibonacci sequence up to the 10th term.
def fibonacci(n):
    a, b = 0, 1
    for i in range(n):
        print(a, end=' ')
        a, b = b, a + b

fibonacci(10)
=====================

「セ氏から華氏への変換」

Prompt: Create a Python function that converts Celsius to Fahrenheit.
def celsius_to_fahrenheit(celsius):
    return (celsius * 9/5) + 32
=====================

「指定された長さのランダムなパスワードを生成するPythonプログラムを書きなさい。」

Prompt: Write a Python program that generates a random password of a specified length.
import string
import random

def generate_password(length):
    characters = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(random.choice(characters) for _ in range(length))
    return password

length = int(input("Enter the length of the password: "))
password = generate_password(length)
print("Generated password:", password)
=====================

「リストの中にある2番目におおきな数字」

Prompt: Implement a Python function that finds the second largest number in a list.
def second_largest(numbers):
    numbers = list(set(numbers))
    numbers.sort()
    return numbers[-2]

# Example usage:
numbers = [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9]
print(second_largest(numbers))  # Output: 8
=====================

コードを補完させる

Prompt: def reverse_string(s):
def reverse_string(s):
    return s[::-1]

# Example usage:
s = "Hello, World!"
print(reverse_string(s))  # Output: "!dlroW ,olleH"
=====================
Prompt: def calculate_average(numbers):
def calculate_average(numbers):
    return sum(numbers) / len(numbers)

# Example usage:
numbers = [1, 2, 3, 4, 5]
print(calculate_average(numbers))  # Output: 3.0
=====================
Prompt: def flatten_list(nested_list):
def flatten_list(nested_list):
    flat_list = []
    for sublist in nested_list:
        for item in sublist:
            flat_list.append(item)
    return flat_list

# Example usage:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(flatten_list(nested_list))  # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
=====================
Prompt: def calculate_bmi(weight,height):
def calculate_bmi(weight, height):
    bmi = weight / (height ** 2)
    return bmi

# Example usage:
weight = 70
height = 1.75
print(calculate_bmi(weight, height))  # Output: 23.157894736842106
=====================
Prompt: Write Python code to create an interactive chat using the Mistral LLM. The code should allow users to input messages and receive responses from the Mistral model in a continuous conversation loop.
To create an interactive chat using the Mistral LLM, you will need to install the `mistralai` package and provide your API key. You can install the package using pip:

```
pip install mistralai
```

Then, you can use the following Python code to create an interactive chat:

```python
import os
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage

# Set your Mistral API key as an environment variable
os.environ["MISTRAL_API_KEY"] = "your_api_key_here"

# Initialize the Mistral client
client = MistralClient()

# Define the model to use
model = "mistral-medium"

# Initialize an empty list to store the chat history
chat_history = []

# Start the conversation loop
while True:
    # Get user input
    user_message = input("You: ")

    # Add the user message to the chat history
    chat_history.append(ChatMessage(role="user", content=user_message))

    # Generate the assistant response
    response = client.chat(
        model=model,
        messages=chat_history,
    )

    # Get the assistant message from the response
    assistant_message = response.choices[0].message.content

    # Print the assistant message
    print("Assistant:", assistant_message)

    # Add the assistant message to the chat history
    chat_history.append(ChatMessage(role="assistant", content=assistant_message))
```

まとめ

mamba-codestral-7B をファーストルック的にさわってみました。

また分かったことを順次追記していきたいとおもいます。

ひとまず次は、 ChatStream.net にのせて、みんなにさわってもらえるようにしたいな~

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?