フランスのスタートアップであるMistral社が公開したMambaベースのプログラミング可能なモデル「mamba-codestral-7B-v0.1」をうちの社長(AI)で試して見ました。
驚くべきことに日本語でも使えます。
インストール時の注意点があります。
まず、ModelCard上の通りにやるとMambaがうまく動かないのでcasual-conv1dを1.4でインストールします。
$ pip install mistral_inference>=1 mamba-ssm causal-conv1d==1.4
その後、PythonのREPLでダウンロードします
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('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", allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"], local_dir=mistral_models_path)
次にこのモデルとチャットするためにmistral_inferenceをインストールします。
$ pip install mistral_inference
その後、以下のコマンドでチャットインターフェースを起動します。
$ mistral-chat $HOME/mistral_models/mamba-codestral-7B-v0.1 --instruct --max_tokens 2048
実際にプロンプトに日本語を入れてみます。
Prompt: 富士山の高さは?
富士山の高さは3,776.24メートルです。
=====================
Prompt: もっと詳しく
富士山は日本の東京都の東京都内にあり、高さは3,776.24メートルです。富士山は日本の代表的な山で、日本の国営公園である富士山国立公園の中心に位置しています。富士山は、日本の歴史や文化、自然環境にも深く関わっています。富士山の頂上には、日本の伝統的な建築物や寺院があり、富士山の頂上には、日本の伝統的な建築物や寺院があります。富士山は、日本の旅行や観光の人気の場所で、富士山の頂上には、日本の伝統的な建築物や寺院があります。富士山は、日本の旅行や観光の人気の場所です。
=====================
富士山を東京にあると誤解しているようです。ここはまあご愛嬌。
でも日本語の質問に対して日本語で返してくるところは見どころがあります。
ゲームを作らせて見ましょう。
Prompt: FizzBuzzを作れ
FizzBuzzは、1から100までの数字を出力し、3の倍数の場合は"Fizz"、5の倍数の場合は"Buzz"、3と5の共通倍数の場合は"FizzBuzz"と出力するプログラムです。以下は、Pythonで実装したFizzBuzzの例です。
```python
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
```
このプログラムは、1から100までの数字をループし、それぞれの数字に対して以下の条件に基づいて出力します。
- 数字が3の倍数である場合、"Fizz"を出力します。
- 数字が5の倍数である場合、"Buzz"を出力します。
- 数字が3と5の共通倍数である場合、"FizzBuzz"を出力します。
- 上記の条件に当てはまらない場合、数字をそのまま出力します。
Prompt: πをできるだけ多い桁数計算するプログラムをpythonで書け
πの値を計算するために、様々なアルゴリズムがありますが、その中でも高精度で計算できるアルゴリズムの1つとして、Bailey–Borwein–Plouffe (BBP) 法があります。このアルゴリズムを使用して、Pythonでπの値を計算するプログラムを書くことができます。
以下は、BBP法を使用してπの値を計算するPythonプログラムの例です。
```python
import decimal
def bbp_pi(precision):
decimal.getcontext().prec = precision + 2
pi = decimal.Decimal(0)
k = 0
while k < precision:
pi += decimal.Decimal(1) / decimal.Decimal(16)**k * (
decimal.Decimal(4) / decimal.Decimal(8*k + 1) -
decimal.Decimal(2) / decimal.Decimal(8*k + 4) -
decimal.Decimal(1) / decimal.Decimal(8*k + 5) -
decimal.Decimal(1) / decimal.Decimal(8*k + 6)
)
k += 1
return pi
precision = 1000 # 計算する桁数
pi = bbp_pi(precision)
print(f"π = {pi:.{precision}f}")
```
このプログラムでは、`bbp_pi`関数を使用して、指定した桁数までπの値を計算します。`precision`変数には、計算する桁数を指定します。計算結果は、`print`関数を使用して出力されます。
このプログラムを実行すると、指定した桁数までπの値が出力されます。ただし、桁数が増加するにつれて、計算に時間がかかることに注意してください。
=====================
このモデルの元になっているMamba2は、事実上無限大のコンテキストに対応していると言われています。「干し草の中から針を見つける」25万6000トークンを与えても正しく見つけることができるところまでテストされています。
このモデルは7Bなのでフットプリントも小さく、Mixture of Agentsのエージェントの一つとして使うのは理想的と言えます。
高性能なローカルLLMが次々とリリースされるのは非常にありがたいですね。