なにかと話題のDeepSeekをローカル環境でサクッと動かす(ollama + Open WebUI)

## はじめに
先日発表のあったDeepSeekのR1をローカル環境で動かしてみました。
DeepSeekの動作環境は大きく分けて

1. GUIインターフェース(web/スマホアプリ)
https://www.deepseek.com/

2. API
https://api-docs.deepseek.com/

3. ローカル環境実行
https://huggingface.co/deepseek-ai/DeepSeek-R1

の3つがあります。
今回はローカル環境での実行方法について紹介したいと思います。
利用規約やプライバシーポリシーが色々と話題になっていますが、ローカル環境で実行する検証方法あればその辺りの懸念は解消できるかと考えています。

DeepSeek R1はMITライセンスでのオープンソースモデルとなっています。
DeepSeek R1の詳細については以下の記事にまとめていますのでご確認ください。

https://zenn.dev/shirochan/articles/2949bf7b0dfdc7



## 前提条件

### 使用するツール
今回はollamaとOpen WebUIを使用します。
https://ollama.com/

https://openwebui.com/

dockerの環境が事前に準備済みであること、dockerコマンドが利用できることが前提です。

## 実践

### 準備
ollamaは、ローカル環境で様々な大規模言語モデル（LLM）を簡単に実行できるオープンソースのツールです。今回は、Docker上でollamaを準備し、DeepSeekを実行します。

また今回はCUI上での動作検証ではなくGUIを用いた動作検証を行います。
そのためOpen WebUIを利用します。

Open WebUIとは完全にオフラインで動作するように設計された、拡張可能で機能が豊富で使いやすいセルフホスト型 AI プラットフォームです。 Ollama や OpenAI 互換 API などのさまざまな LLM ランナーをサポートし、RAG 用の推論エンジンが組み込まれているため、強力な AI 導入ソリューションになります。

#### Docker環境の確認
まず、以下のコマンドでDocker環境が正しく設定されていることを確認します：

```zsh
docker --version
```

#### ollama/OpenWebUIコンテナの起動
今回はdockerコンテナを起動するためにdocker-compose.yamlを用意しました。

```yaml: docker-compose.yaml
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    volumes:
      - ollama:/root/.ollama
    ports:
      - "11434:11434"
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: always

volumes:
  ollama:
    name: ollama
  open-webui:
    name: open-webui
```

コンテナの起動
```bash
docker compose up -d
```

などでコンテナを立ち上げれば検証環境ができあがります。


### モデルの実行
Webブラウザで http://localhost:3000/ にアクセスするとOpen WebUIの画面が表示されます。

![](https://storage.googleapis.com/zenn-user-upload/c43cd147d02f-20250130.png)
動作検証したいモデルを選択してあとはchatGPTなどと同様にチャットするだけです

注意事項としては最初は動作検証したいモデルをプルする必要があります。
以下のサイトを参考に動作検証したいモデルを指定してプルしてください。
https://ollama.com/search

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35782/cf734a0a-0874-5de6-3dba-8e9eec894f4b.png)

実際に数学の問題を解かせてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35782/437fd3e6-8de8-656b-bf78-f0ed3cf2e8ef.png)


3分ほどかかりましたがこのレベルの数学問題であれば回答できます。

ちなみにwebインターフェースで試したところ8秒で回答が得られました。
やはりパラメータ数の違いによるモデルの性能差は大きそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35782/617f8ea7-1f4f-91ab-454f-6ee74f6b8e54.png)

<details><summary>回答結果</summary>
**解答**

次の積分を求めます：

$$
\int (3x^2 + 7x - 3) \, dx
$$

**ステップ 1：各項を個別に積分する**

1. **$3x^2$ の積分**  
   指数を1増やし、係数を新しい指数で割ります：

     
   $$
   \int 3x^2 \, dx = 3 \cdot \frac{x^{2+1}}{2+1} = x^3
   $$

3. **$7x$ の積分**  
   同様に計算します：

     
   $$
   \int 7x \, dx = 7 \cdot \frac{x^{1+1}}{1+1} = \frac{7}{2}x^2
   $$

4. **$-3$ の積分**  
   定数の積分は定数×$x$ です：

    
   $$
   \int (-3) \, dx = -3x
   $$

**ステップ 2：結果をまとめる**  
すべての項を結合し、積分定数 $C$ を加えます：

$$
\int (3x^2 + 7x - 3) \, dx = x^3 + \frac{7}{2}x^2 - 3x + C
$$

**答え** 

$$
\boxed{x^3 + \frac{7}{2}x^2 - 3x + C}
$$

</details>

## まとめ
DeepSeekをローカル環境で実行してみました。
ollamaには1.5bから671bまでのDeepSeekのモデルが利用可能な状態で登録されていました。

https://ollama.com/library/deepseek-r1

今回は7Bのモデルまでしか試していないですがマシンスペックが高ければより大きなモデルもローカル環境で検証が可能です。


## 関連・おすすめ書籍
- [生成AIで世界はこう変わる](https://amzn.to/4gkTkbc)
- [LangChainとLangGraphによるRAG・AIエージェント［実践］入門](https://amzn.to/4b8JC9C)
- [仕組みからわかる大規模言語モデル 生成AI時代のソフトウェア開発入門](https://amzn.to/41qUgWc)