DeepSeek-R1のFine-tuningを試してみた


最近、DeepSeekが開発したDeepSeek-R1という、第1世代推論モデルが注目を浴びています。その強みは数学、コーディング、推論タスクでのパフォーマンスの高さであり、多くのベンチマークでも非常に優秀な結果を出しています。今回私は、この「DeepSeek-R1-Distill-Qwen-7B」モデルを実際にPlatform for AI (PAI)で微調整することに挑戦しました。

## **DeepSeek-R1とは？**

DeepSeek-R1はDeepSeekが開発したAIモデルで、LLamaやQwenモデルをベースとした、様々な高密度な蒸留モデルが作成されています。

その中でも今回利用したのは「DeepSeek-R1-Distill-Qwen-7B」というモデルです。比較的小規模で、個人でも扱いやすいモデルサイズです。

## **環境構築と準備**

PAIのコンソールにログインして、事前に用意していたワークスペースを開きました。地域設定を行い（今回はシンガポールリージョン）、左側のナビゲーションから「**QuickStart**」「**Model Gallery**」を選んで、該当のモデルカードをクリックすると、モデルの詳細ページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/83c47950-a44f-4e8c-9ed0-25411a040ed5.png)

https://pai.console.aliyun.com/?regionId=ap-southeast-1&spm=a2c63.p38356.0.0.12581db0KpJ1FI&workspaceId=162827#/quick-start/models/DeepSeek-R1-Distill-Qwen-7B/intro

ここではモデルの詳細、微調整用のデータ形式、利用手順などの細かい情報を見ることができます。

## **トレーニング**

右上にある「**Train（トレーニング）**」をクリックして、次の設定を行いました。

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/7f4c2917-d884-4b5f-921e-884b895e3fe2.png)

### **データセットの構成**

事前に準備したデータをAlibaba CloudのObject Storage Service (OSS)バケットにアップロード済み。「Download Sample Dataset」をダウンロードし、中国語の部分を日本語に変換したものを「OSS file or directory」でアップロードしたものを利用します。

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/cadd979e-bc36-4b2f-acbe-c2ff7c7490ed.png)

下記が変換したデータのサンプルです。

![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/7439a2ff-2539-4fd5-8e32-0b8f2731ad3d.png)

### **コンピューティングリソース**

PAIの推奨する最低限設定（GPUの設定やメモリサイズなど）を選択。

![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/55a0cd9d-f26b-4e7b-b638-012c7fdc8da8.png)

### **ハイパーパラメータ設定**

主に以下のようなパラメータを設定しました（デフォルトの推奨値）。

- **学習率（learning_rate）**: 5e-6
- **エポック数（num_train_epochs）**: 6
- **デバイスごとのバッチサイズ（per_device_train_batch_size）**: 2
- **最大トークン長（max_length）**: 1024
- **LoRAランク（lora_rank）**: 8
- **LoRAドロップアウト率（lora_dropout）**: 0

特に、LoRA（Low-Rank Adaptation）はパラメータを効率的に調整できる手法で、小規模リソースのトレーニングでもパフォーマンス効率が期待できます。

![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/1b5331a9-d9d6-47f9-b91b-b3355f704c43.png)

## **トレーニング実施とその結果**

設定が完了すると、「Train」でトレーニング開始。

![image-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/386419dd-8151-441e-a7d9-c2e221af3f2e.png)

PAIのトレーニング画面で、進捗とログをリアルタイムで確認できます。

![image-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/f2c3fb3f-f976-4fb0-bfe4-58a5e7c56bbf.png)

Task log

![image-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/cec1858a-5138-448e-a149-fb8dbda7cbd7.png)

Task monitoring

![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/b0f81963-f022-4c78-a10c-2a34ad106562.png)

Metric Curve

トレーニング中の損失の進行が表示されます。損失値が下降する様子が確認でき、問題なく進んでいることが分かりました。

![image-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/c0fca402-139c-413c-8433-02cfd9b93c56.png)

約15分でトレーニングが完了しました。

![image-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/70f9d25e-16e9-4fa1-a53e-d7cc34e6e4f7.png)

## **デプロイと実際の活用**

トレーニングしたモデルはワンクリックでデプロイでき、EASサービスとして簡単に利用可能です。API経由でSNSや他システムと連携したり、個人的なプロジェクトでも応用できそうです。

![image-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/8d8a573d-fbf2-4b3b-a055-7a17fe959df8.png)

デプロイ後、作成が始まります。

![image-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/39c4180e-9b40-4837-b63f-ffcb02dc5941.png)

Runningになったら View Endpoint Information から URLとTokenを取得します。

![image-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/3b267380-952e-4d4a-8422-1eba73b58902.png)

Pythonのプログラムを下記で実行し、Web UIにて確認していきます。

ダウンロードはここから。

[https://github.com/aliyun/pai-examples/blob/master/model-gallery/deploy/llm/vLLM/webui_client.py](https://github.com/aliyun/pai-examples/blob/master/model-gallery/deploy/llm/vLLM/webui_client.py)

```bash
# 初回のみ環境整える
$ python -m venv .venv 
$ source .venv/bin/activate.fish 
$ pip install gradio openai

# 実行コマンド
$ python webui_client.py --eas_endpoint "<EAS API Endpoint>" --eas_token "<EAS API Token>"
...
* Running on local URL:  http://127.0.0.1:7860
```

モデルがPAIによって開発されていることが学べています。

![image-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/0e396b55-357f-4e41-8ad5-2e16bf38128b.png)

## **感想とまとめ**

DeepSeek-R1モデルを自分の手で微調整した経験はとても有意義でした。手順が明確で迷いなくできるため、個人でも簡単にAIモデルの訓練ができそうでした