safetensorsって何？機械学習モデルを安全・高速に扱う新標準フォーマット

## はじめに

最近、Stable DiffusionやLLM（大規模言語モデル）のモデルファイルで、拡張子が `.safetensors` のものをよく見かけるようになりました。これは何なのか、なぜ使うべきなのか、具体的にどう使うのか、わかりやすく解説します。

この記事は[safetensors: AIモデルの新しい標準ファイルフォーマットの仕組みと利点](https://tech.jugoya.ai/blog/safetensors-explained)を参考に、実践的な観点から再構成したものです。

## safetensorsとは？

safetensorsは、機械学習モデルのデータを保存・読み込むための新しいファイル形式です。従来のPyTorchで使われていた`.pth`や`.pt`（pickleフォーマット）の問題点を解決するために、Hugging Face社が開発しました。

簡単に言うと以下のような特徴があります：

- 🔒 **安全**: モデルファイルに悪意のあるコードが含まれる心配がありません
- ⚡ **高速**: 従来形式と比べて約100倍速く読み込めます
- 💾 **効率的**: 必要な部分だけを読み込めるので、メモリを効率的に使えます
- 🔄 **互換性**: PyTorch、TensorFlow、JAXなど、主要なフレームワーク間で互換性があります

## なぜsafetensorsが必要なの？

### 1. セキュリティの問題

従来のpickleフォーマットには大きな問題がありました。モデルファイルを読み込んだ時に、知らないうちに悪意のあるコードが実行される可能性があったのです。

```python
# pickleフォーマットを使う従来の方法
import torch
model = torch.load("model.pth")  # ⚠️ 危険！悪意のあるコードが実行される可能性
```

これに対してsafetensorsは、2024年初頭にセキュリティ専門企業による監査を通過し、安全性が確認されています。

### 2. 読み込み速度の問題

大規模なAIモデルは、ファイルサイズが数GB～数十GBにもなります。従来の形式では読み込みに時間がかかり過ぎる問題がありました。

safetensorsは以下のような工夫で、読み込みを大幅に高速化しています：

- 効率的なファイル構造の採用
- 必要な部分だけを読み込める設計
- Rust言語による高速な実装

## 実践：safetensorsの使い方

### 基本的な使い方（PyTorch）

```python
from safetensors.torch import save_file, load_file

# モデルの保存
model_dict = model.state_dict()  # モデルのパラメータを取得
save_file(model_dict, "model.safetensors")

# モデルの読み込み
loaded_dict = load_file("model.safetensors")
model.load_state_dict(loaded_dict)
```

### Transformersライブラリでの使い方

最近のTransformersライブラリでは、特に設定しなくてもsafetensorsが優先的に使われます：

```python
from transformers import AutoModel

# モデルの読み込み（自動的にsafetensorsを使用）
model = AutoModel.from_pretrained("bert-base-uncased")
```

## Stable Diffusionでの実践的な使い方

Stable Diffusionでは、最近ほとんどのモデルがsafetensors形式で配布されています。

### Automatic1111 Web UIでの使用手順

1. モデルのダウンロード
   - CivitAIなどから`.safetensors`形式のモデルをダウンロード

2. 適切なフォルダに配置
   ```
   stable-diffusion-webui/
   ├── models/
   │   ├── Stable-diffusion/  # ベースモデル(.safetensors)
   │   ├── Lora/             # LoRAモデル
   │   └── VAE/              # VAEモデル
   ```

3. Web UIで自動認識される

### よくあるトラブルと解決方法

1. `TypeError: __init__() got an unexpected keyword argument 'ensure_ascii'`
   - safetensorsのバージョンが古い可能性があります
   - `pip install -U safetensors` で更新してください

2. `RuntimeError: Couldn't load safetensors`
   - ファイル名に特殊文字が含まれていないか確認
   - ファイルが破損していないか確認

## 主なツールと入手先

### モデルの入手先
- [Hugging Face](https://huggingface.co/): 機械学習モデルの主要な配布プラットフォーム
- [CivitAI](https://civitai.com/): Stable Diffusion関連のモデルが豊富
- [ModelScope](https://modelscope.cn/models): アジア圏のモデルも充実

### 変換ツール
既存のモデルをsafetensors形式に変換するツールもあります：

1. [Hugging Face Convert Space](https://huggingface.co/spaces/diffusers/convert)
   - ブラウザで簡単に変換できるWebツール
   - セキュリティスキャン付き

2. [Safe and Stable Ckpt2Safetensors](https://github.com/diStyApps/Safe-and-Stable-Ckpt2Safetensors-Conversion-Tool-GUI)
   - Windows/Linux対応のGUIツール
   - バッチ変換にも対応

### Stable Diffusion関連の主要ツール
1. [Automatic1111 Web UI](https://github.com/AUTOMATIC1111/stable-diffusion-webui)
   - 最も人気の高いWebインターフェース
   - 豊富な機能と拡張機能

2. [ComfyUI](https://github.com/comfyanonymous/ComfyUI)
   - ノードベースのワークフロー
   - 柔軟なカスタマイズが可能

3. [InvokeAI](https://github.com/invoke-ai/InvokeAI)
   - モダンなUI
   - 統合的な画像編集機能

4. [Fooocus](https://github.com/lllyasviel/Fooocus)
   - Midjourneyライクな簡単操作
   - SDXL対応の最適化

## おわりに

safetensorsは、機械学習モデルを扱う上での新しい標準となりつつあります。特に：

- セキュリティが重要な実務での利用
- 大規模モデルを扱う場合
- 複数のフレームワークを使う場合

に大きなメリットがあります。今後ますます普及が進むと予想されるので、基本的な使い方を押さえておくと良いでしょう。

## 参考リンク

- [safetensors: AIモデルの新しい標準ファイルフォーマットの仕組みと利点](https://tech.jugoya.ai/blog/safetensors-explained)
- [safetensors公式ドキュメント](https://huggingface.co/docs/safetensors)
- [Hugging Face safetensorsリポジトリ](https://github.com/huggingface/safetensors)