devnote
Hugging Face
- モデルをダウンロードするとすぐに容量不足になる.
- 環境変数
HF_HOMEで変更できる.デフォルトは"~/.cache/huggingface" - またはシンボリックリンクを作成する
llama.cpp
GitHub - ggerganov/llama.cpp: LLM inference in C/C++
- LLM inference in C/C++.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build
cd build
cmake ..
cmake --build . --config Release
- CUDA を有効にする場合
cmake .. -DGGML_CUDA=ON -T="v142"
cmake --build . --config Release
以下のようなエラーが出ることがある
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2\include\crt/host_config.h(157): fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.
要約すると “unsupported Microsoft Visual Studio version!” とのこと.どうやらCUDAとVisualStudio のバージョンが曖昧らしい.そのため、 -T="v142" を指定する.
また、検索すると CUDA を有効にする場合 LLAMA_CUBLAS を指定すると書かれているものが多いが、現在は非推奨で代わりに GGML_CUDA を指定する.ちなみに GGML は作者の名前と合わせて “GGerganov Machine Learning” らしい
CUDA(Compute Unified Device Architecture)はNVIDIAのGPUコンピューティング用プログラミングモデルおよびプラットフォームのこと.BLAS(Basic Linear Algebra Subprograms)は線形代数を高速に計算するライブラリ.cuBLASはBLASをCUDAで高速に計算するライブラリのこと.
-j オプションを追加するとヒープが足りなくなる
ビルドが終わったらインストール.ビルドディレクトリで以下を実行
cmake --install . --prefix ..
llama-cpp-python
GitHub - abetlen/llama-cpp-python: Python bindings for llama.cpp
- llama.cpp を python から扱えるようにしたもの.標準ではGPUを使わない設定でビルドする.
- 事前にビルドされたバイナリをインストールするオプションが追加された.CUDAのバージョンに合わせてインストールする
pip install llama-cpp-python \
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/<cuda-version>
cuda 12.1
pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu121
CUDA Version is 12.1, 12.2, 12.3, or 12.4
Python Version is 3.10, 3.11 or 3.12
SGLang
Token
OpenAI の場合、tiktoken を使う。
import pypaperclip
import tiktoken
def count_clipboard_tokens():
# クリップボードからテキストを取得
text = pyperclip.paste()
if not text:
print("クリップボードが空です")
return
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode(text)
print(f"トークン数 (ChatGPT): {len(tokens)}")
Gemini の場合、API を使用
import os
import pypaperclip
from google import genai
def count_clipboard_tokens():
# クリップボードからテキストを取得
text = pyperclip.paste()
if not text:
print("クリップボードが空です")
return
client = genai.Client(api_key=os.environ["GOOGLE_API_KEY"])
result = client.models.count_tokens(model="gemini-2.5-pro", contents=text)
print(f"トークン数 (Gemini): {result.total_tokens}")