Alibaba Deepseek−V3とDeepseek−R1のデプロイ



AIモデルのデプロイは、日々の業務や研究開発において重要なテーマの一つかと思います。今回は、最新の大規模言語モデル（LLM）、DeepSeek V3とR1のデプロイ方法について、詳細な手順とともに解説していきます。

## **DeepSeek-V3およびDeepSeek-R1モデルの概要**

DeepSeekの中でもV3とR1は、性能と効率性の両面で他のLLMモデルよりも優れた特性を持つモデルとして注目されています。

### **DeepSeek V3:**

高度な処理能力と効率的なリソース利用を両立した、次世代のLLMです。複雑な自然言語処理タスクにも対応可能です。6710億（671B）パラメータを持つ大規模なMoE（Mixture of Experts）言語モデルです。MoEアーキテクチャは、複数の専門家（Expert）モデルネットワークを組み合わせることで、モデルの効率と性能を向上させる手法です。このアーキテクチャにより、DeepSeek-V3は膨大なパラメータ数を持ちながらも、効率的な推論が可能になっています。ちなみに GPT-3は175B、GPT3.5は355B でした。少し前までは性能にはパラメータ数で測っていたものが DeepSeekはMoEアーキテクチャを採用することで、V3の性能をあげていきました。

### **DeepSeek R1:**

V3のアーキテクチャを基盤としつつ、リソース効率をさらに最適化したモデルです。限られた計算資源下でも高いパフォーマンスを発揮します。特に推論速度と効率性に最適化されており、実用的なアプリケーションに適しているそうです。下記の3つの技術を組み合わせることで、高効率かつ高性能を実現しています。

1. **知識蒸留（Distillation）**

大規模モデル（V3）の知識をコンパクトなR1に転移し、モデルサイズを抑えつつ高精度を維持。

1. **強化学習（Reinforcement Learning）**

学習済みのモデルをさらにタスク特化で最適化し、より賢く、柔軟な推論が可能に。

1. **Thinkモード**

実行時には「Thinkモード」によって、多段階の思考プロセスを採用。複雑なタスクもステップごとに推論し、精度を向上させています。

## Distill（蒸留）について

よくDistill という言葉が見られるようになりました。これは「知識蒸留（Knowledge Distillation）」です。

知識蒸留は、大規模なモデル（教師モデル）が持つ知識を、より小規模で軽量なモデル（生徒モデル）に転移させる技術です。以下のような手順で行われます：

1. **教師モデルを訓練:** 大規模なモデル（例：DeepSeek V3）を膨大なデータで訓練し、高い精度を獲得させます。
2. **生徒モデルを準備:** 小規模なモデル（例：DeepSeek R1）を準備します。このモデルは、教師モデルのサイズに比べて、パラメータ数が少なく、計算リソースが少ないです。
3. **知識の転移:** 生徒モデルが教師モデルの出力を学べるように、特定の損失関数や最適化手法を用いて訓練します。結果として、生徒モデルは教師モデルの知識を「蒸留」し、コンパクトながら高い性能を実現します。

## デプロイ方法

V3は大規模なGPUが必要になってきます。今回はDeepSeeK R1のデプロイを試してみましょう。

様々なモデルがDeepSeekの中でも様々なモデルが存在しており、その中でも超軽量なモデル「DeepSeek-R1-Distill-7B」で試していきたいと思います。、7Bまで小さくしたモデルでどこまで回答が可能なのかを試してみたいと思います。

また、Deployには Alibaba Cloud Platform for AI（PAI）のモデルギャラリーを利用していきます。モデルギャラリーを利用することで、単純な設定でデプロイが出来るようです。

### **Model deployment**

まずはAlibaba Cloudにログインし、PAIのModel Galleryを開きます。そこで様々なモデルが存在するので「DeepSeek-R1-Distill-Qwen-7B」を検索します。対象のカードにフォーカルを当てることで「Deploy」ボタンが出現します。これを押すことで、Deploy画面へ遷移します。

[https://pai.console.aliyun.com/?regionId=ap-northeast-1&spm=a2c63.p38356.0.0.51ba1867qQrzfo#/quick-start/models?search=DeepSeek-R1-Distill-Qwen-7B](https://pai.console.aliyun.com/?regionId=ap-northeast-1&spm=a2c63.p38356.0.0.51ba1867qQrzfo#/quick-start/models?search=DeepSeek-R1-Distill-Qwen-7B)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/af40c9d2-a7ad-4c3e-936a-e62af54e8c39.png)

Deploy画面では特に変更は行わず、「Deploy」を実行していきます。

![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/1437c7b9-c008-415f-aab5-0ce3bb255fe5.png)

リソースも指定されたものをそのまま利用します。

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/7ea5f68a-b71c-4cde-8d28-3c5d54831e6f.png)

Deployが実行中の画面になりました。

![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/ad5c03c3-4604-4bfb-ae5a-4fe0f554c729.png)

View Endpoint Information から Public Endpoint や Token をコピーしておきましょう。

![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/030686df-5439-48b0-94a6-fe3074fbc814.png)

## 実行してみよう

下記のGitHubからPythonファイルをダウンロード

[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)

下記で実行を行う

```json
# 初回のみ環境整える
$ 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
```

開いた画面はこんな感じ

![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/1734ebae-e3ab-4b48-afae-1898fc77cb41.png)

1. 有名なストロベリー問題を解かせてみましょう。

```json
strawberryには r が何個含まれているか、数えてみてください
```

回答

```markdown
<think>
I need to determine how many times the letter 'r' appears in the word "strawberry."

First, I'll write down the word and examine each letter one by one.

S T R A W B E R R Y

I'll go through each letter carefully to count the 'r's.

Starting from the beginning: S (not an r), T (not an r), R (count 1), A (not an r), W (not an r), B (not an r), E (not an r), R (count 2), R (count 3), Y (not an r).

After reviewing all the letters, I find that there are three 'r's in the word.
</think>

解答:

```
s t r a w b e r r y
```

1. S
2. T
3. R （1回）
4. A
5. W
6. B
7. E
8. R （2回）
9. R （3回）
10. Y
答: strawberry には 3個 的
r
r
が含まれています。

\boxed{3}
```

おー、合っています。7Bでもこの問題を解くのは素晴らしい。

1. 簡単な計算

```markdown
3+5
```

```markdown
<think>
First, I recognize that the problem is asking for the sum of 3 and 5.

Next, I add the two numbers together: 3 plus 5 equals 8.

Therefore, the final answer is 8.
</think>

Solution:

We need to find the sum of (3) and (5).

[
3 + 5 = 8
]

Answer: (\boxed{8})
```

1. ジョーク。難しいので英語で質問

```markdown
「カエルの子はカエル」だけど、おたまじゃくしの子は何？
> In Japanese, there is a proverb that translates to "A frog's child is still a frog."
Question: If that is true, then what do you call a tadpole's child?
```

回答

```markdown
<think>
Alright, let's try to figure out what the user is asking here. They mentioned a Japanese proverb that says "A frog's child is still a frog," which translates to "A frogの子は、ещ Still a frog." So, in English, that means "A frog's child is still a frog." They then ask, "If that is true, then what do you call a tadpole's child?"

Okay, first off, I need to understand the context. The user is drawing a comparison between frogs and tadpoles. They're playing with the idea of how each generation or offspring relates to their parents in terms of species.

I know that frogs are mammals, but they have moist skin and lay eggs, so they're technically amphibians. Tadpoles are the young ones of frogs, right? So, if a frog's child is still a frog, then a tadpole's child would likely be a frog since frogs are the adult form after tadpoles grow up.

But wait, the user is asking what you call a tadpole's child. Maybe they're looking for a specific term or analogy. In Japanese folklore, I'm remembering stories where a mother frog might have frog offspring. But more commonly, when a frog reproduces, its tadpole stage becomes a frog.

So, if the proverb is about frogs staying frogs, then a tadpole's child would be a frog, maintaining the same species. It's important to highlight the biological aspect here—tadpoles developing into frogs, which are still the same species.

I should make sure to explain that even though a tadpole is a frog's offspring, it's still technically a frog once it grows up. Maybe the user is curious about the terminology or the biological classification.

Also, considering the user might not be a native speaker, providing a clear explanation without too much jargon would be helpful. So, emphasizing that frogs have multiple generations—tadpoles, young frogs, and then fully grown frogs—each still being frogs.

In summary, the child of a tadpole is still a frog, continuing the frog family. So, the answer would be that a tadpole's child is a frog, just like a frog's child is still a frog. It maintains the same species across generations.
</think>

In Japanese folklore, the proverb "A frog's child is still a frog" (\text{A frogの子は、ещ Still a frog) suggests that frogs and their descendants remain within the same species. Following this logic, a tadpole's child is still referred to as a frog.

Tadpoles are young amphibians, and when they grow up, they become frogs. Therefore, just as a frog's child remains a frog, a tadpole's child is also a frog.
```

回答翻訳

```markdown
日本には「蛙の子は蛙」ということわざがある。この論理に従えば、オタマジャクシの子供もやはりカエルということになる。

オタマジャクシは両生類の幼生で、成長するとカエルになる。したがって、カエルの子供がカエルのままであるように、オタマジャクシの子供もまたカエルなのである。
```

高速な返答かつ十分すぎる会話をしている気がします。

 

## まとめ

今回は簡易的にモデルデプロイを行い、DeepSeek−R1のDistill（蒸留）モデルの実行していきました。

限られた計算資源下でも高いパフォーマンスを発揮が出来ました。