見出し画像

llama-cpp-python をMacbookProにインストールしてみる

mlx環境で今までいろいろとLLMを試してきましたが、llama.cppがまだデファクトみたいなようですので、llama-cpp-pythonをインストールしてみることにしてみました。

ドキュメンテーションをみると、こんなことが書かれています。

llama-cpp-python以下を実行することで、ソース ディストリビューションとして PyPI から直接インストールできます。

pip install llama-cpp-python

これにより、cmake とシステムの C コンパイラ (必須) を使用してソースからビルドされllama.cpp、この Python パッケージと一緒にライブラリがインストールされます。

簡単に思えますが、後半の部分の意味がわからないので、GPT-4に尋ねてみました。

この文章は、Mac OSなどのシステムでPythonパッケージ `llama-cpp-python` をインストールする方法について説明しています。具体的には以下の手順を踏むことを指しています。

1. **ソースディストリビューションのインストール:**
`pip install llama-cpp-python` コマンドを使って、Pythonパッケージインデックス(PyPI)から `llama-cpp-python` パッケージをソースディストリビューションとしてインストールします。ソースディストリビューションとは、パッケージのソースコードが含まれている形式の配布物です。

2. **ビルドプロセス:**
パッケージをインストールする過程で、`cmake` とシステムのCコンパイラを使用して、`llama.cpp`(恐らくパッケージの一部であるC++のソースファイル)がソースからビルドされます。このプロセスは自動的に行われるため、ユーザーが手動でコンパイルする必要はありません。

3. **依存関係:**
このパッケージをインストールするためには、`cmake` とCコンパイラがシステムにインストールされている必要があります。これらはビルドシステムとコンパイラであり、ソースコードから実行可能なコードを生成するために必要です。

Mac OSには、標準のCコンパイラとして `clang` が含まれていますが、`cmake` は別途インストールする必要があります。`cmake` は、Homebrewを使用して簡単にインストールできます:

```sh
brew install cmake
```

もしHomebrewがインストールされていない場合は、先にHomebrewをインストールする必要があります。Homebrewは、Mac OSのパッケージマネージャで、多くの開発ツールやライブラリを簡単にインストールするのに使われます。

文章の最後に、「このPythonパッケージと一緒にライブラリがインストールされます」とありますが、これは `llama-cpp-python` パッケージのインストールが完了すると、それに関連するライブラリもシステムにインストールされることを意味しています。これにより、必要なすべてのコンポーネントがインストールされ、パッケージが正しく機能するようになります。

GPT-4

Homebrewは過去に一度チャレンジしてインストールされたました。

ところで、今回も別なconda環境のもとで試したいので、そのことを尋ねてみたところ、下記の回答でした。

はい、もし `llama-cpp-python` パッケージをConda環境内で使用する予定であれば、`cmake` もそのConda環境内にインストールすることをお勧めします。これにより、Conda環境内のパッケージ間での依存性が整合性を保ち、システム全体に影響を与えることなく、独立した環境を維持することができます。

Conda環境で `cmake` をインストールする手順は以下の通りです。

1. まず、目的のConda環境をアクティブにします。

```sh
conda activate <your_environment_name>
```

2. 次に、アクティブにした環境に `cmake` をインストールします。

```sh
conda install -c conda-forge cmake
```

ここで `-c conda-forge` は、`conda-forge` チャンネルから `cmake` をインストールすることを意味します。`conda-forge` は、多くのパッケージが利用可能なコミュニティ主導のCondaチャンネルです。

3. インストールが完了したら、`cmake` のバージョンを確認してインストールが正しく行われたことを確認します。

```sh
cmake --version
```

この手順により、`llama-cpp-python` パッケージをインストールするのに必要な `cmake` がConda環境内にセットアップされます。そして、`pip install llama-cpp-python` コマンドを実行する際に、`cmake` が利用されて必要なビルドプロセスを完了することができます。

ということなので、まずはllama-cpp-python を実行するconda環境を以下のコマンドで作成します。

conda create --name llamaenv python=3.11.5

そのあと、conda info -e でconda環境ができたことを確認して、conda activate llamaenv で立ち上げます。

このconda環境を立ち上げた状態で、brew install cmake を実行しました。

実行後の画面

多分、いいのではないかなと…

ここまできたところで、以下のドキュメントを発見。

Xcode がインストールされてることが必要なようです。それで、Xcodeとはを尋ねると

Xcodeは、Appleによって開発された統合開発環境(IDE)で、macOS、iOS、watchOS、およびtvOSのアプリケーションを開発するために広く使われています。Xcodeには、ソースコードエディタ、コンパイラ、ビルドシステム、デバッガ、インターフェースビルダーなど、アプリケーション開発に必要なツールが一通り揃っています。

Xcodeには、Appleのプラットフォーム用のアプリ開発に必要なCommand Line Toolsも含まれていて、これにはGitやmake、LLVM、Clang(C/C++/Objective-C コンパイラ)、および多くのUNIX系コマンドラインツールが含まれます。

macOSで特定のソフトウェアをビルドする際には、これらのCommand Line Toolsが必要な場合があります。たとえば、HomebrewやいくつかのPythonパッケージなど、ソースからビルドする必要のあるソフトウェアをインストールする場合には、これらのツールが必要になります。

Xcodeをインストールするには、以下の方法があります:

1. **Mac App Storeからインストール:**
Mac App Storeを開き、検索バーに「Xcode」と入力して、アプリを見つけてからインストールします。Xcodeは数ギガバイトのサイズがあるため、ダウンロードとインストールには時間がかかる場合があります。

2. **Command Line Toolsのみをインストール:**
Xcode全体が必要ない場合や、ディスクスペースを節約したい場合は、Command Line Toolsだけをインストールすることもできます。これは以下のコマンドをターミナルで実行することで行えます:

```sh
xcode-select --install
```

このコマンドを実行すると、インストールプロセスが開始されます。XcodeやCommand Line Toolsがインストールされているかどうかを確認するには、ターミナルで `xcode-select -p` を実行します。これはインストールされているXcodeのパスを表示します。

なお、Command Line ToolsはXcodeをインストールせずとも、ソフトウェアのビルドに必要なツールを提供しますが、Xcode自体には追加の開発ツールが多数含まれています。ドキュメントによっては、Xcodeの完全なインストールを要求するものもあるため、指示に従って適切な手段を選択してください。

GPT-4

xcode-select -p で確認すると、CommandLineTools がすでにインストールされているようでいいみたいだと判断して、次に進みます。

conda activate llamaenv

最初のドキュメントにもどってみると、下記のことが書かれています。

デフォルトの pip インストール動作では、llama.cppLinux および Windows では CPU のみをビルドし、MacOS では Metal を使用します。

ということで、conda環境ですが、pipをつかった以下のコマンドを実行。

CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python

以下の表示がでたので無事にインストールできたと思います。

Successfully installed llama-cpp-python-0.2.38

再度、確認。

(llamaenv) ~ % pip list
Package Version
----------------- -------
diskcache 5.6.3
Jinja2 3.1.3
llama_cpp_python 0.2.38
MarkupSafe 2.1.5
numpy 1.26.3
pip 23.3.1
setuptools 68.2.2
typing_extensions 4.9.0
wheel 0.41.2

試していませんが、upgradeのコマンドは以下とのことです。メモ

pip install llama-cpp-python  --upgrade --force-reinstall --no-cache-dir

あと以下のページを見ながら、試行錯誤しました。


最終的に、下記のスクリプトを走らせたら、うまくいったかなという印象。
引数がいろいろとまだ理解できてません…

from llama_cpp import Llama
# プロンプトを記入 #prompt  = "<|startoftext|>Write a story about winter.<|endoftext|>"
prompt = "<|startoftext|>SYSTEM: You are Helpful assistant.<|endoftext|>\n<|startoftext|>USER: What's the meaning of life?.<|endoftext|>\nAssistant:"
# ダウンロードしたModelをセット.
llm = Llama(model_path="/Users/liberoscholar/ai/projects/text-generation-webui/models/capybara-tess-yi-34b-200k-dare-ties.Q4_K_M.gguf", n_gpu_layers=-1, verbose = False)
# 生成実行
output = llm(
    prompt, max_tokens=1025, stop=["<|endoftext|>", "</s>"], echo=True,
)
print(output['choices'][0]['text'])

上はllamasample.pyで保存してます。
(llamaenv) myllm % python llamasample.py で実行結果 

<|startoftext|>SYSTEM: You are Helpful assistant.<|endoftext|>
<|startoftext|>USER: What's the meaning of life?.<|endoftext|>
Assistant: The meaning of life is a philosophical question concerning the nature, purpose, and significance of human existence. It has been the subject of much debate among philosophers, theologians, scientists, and other thinkers throughout history. Some people believe that life has inherent value and purpose, while others argue that it is up to each individual to create their own meaning. Some common theories about the meaning of life include:

1. Religious beliefs: Many people find meaning in their lives through their religious beliefs. They believe that their lives have a purpose set by a higher power or deity. This can include things like fulfilling God's plan, living morally, and preparing for an afterlife.

2. Purpose in work or career: Some people find meaning in their lives through their work or career. They believe that their skills and talents can be used to make a positive difference in the world. This can include things like helping others, creating something of value, or contributing to society in some way.

3. Personal relationships: For many people, relationships with family, friends, and loved ones provide a sense of meaning in their lives. They believe that their connections with others give their lives value and purpose. This can include things like providing for loved ones, building strong relationships, and creating positive memories together.

4. Self-improvement and personal growth: Some people find meaning in their lives through self-improvement and personal growth. They believe that their lives have value as they work to become better versions of themselves. This can include things like learning new skills, overcoming challenges, and developing as individuals.

5. Contemplation and introspection: For some people, finding meaning in life involves deep contemplation and introspection. They believe that it is up to each individual to create their own sense of meaning through self-reflection and personal experience. This can include things like questioning one's values, exploring one's beliefs, and seeking truth or understanding.

In conclusion, the meaning of life is a deeply personal question that can vary greatly from person to person. Ultimately, it is up to each individual to determine what gives their life value and purpose.
(llamaenv) myllm %

一応、なんとか動いたようです。


#AI #AIとやってみた #やってみた #MacbookPro #python入門 #ローカルLLM #llama .cpp

この記事を最後までご覧いただき、ありがとうございます!もしも私の活動を応援していただけるなら、大変嬉しく思います。