プログラミング

Ollamaを使ってローカルでDeepSeekを動かしてみた



どうも、ねぎねずです。

中国の生成AI「DeepSeek」が話題になってますね。

高精度で低コストということで一気に広がりました。

また、株式会社サイバーエージェントがDeepSeekをベースに日本語データを学習させたモデルを2025年1月27日に公開しました。

今回はその日本語データを学習した「DeepSeek-R1-Distill-Qwen-14B」をローカルPCで動かしたいと思います。


本記事の内容

  • Ollamaを使ってローカルPCにDeepSeekをダウンロードする
    • DeepSeekはサイバーエージェントの日本語学習済みモデルを利用
  • PowerShellでDeepSeekを実行する
  • PythonでDeepSeekを実行する


参考として、本記事の環境は下記のとおりです。

  • Windows 11 Home
  • メモリ 16GB
  • CPU Core i5-14400F


DeepSeekのセキュリティリスクとは


はじめにDeepSeekのセキュリティリスクについて触れておきます。


DeepSeek」は高精度・低コストと言われて一気に利用されるようになりましたが、セキュリティリスクがあると言われています。

アカウントを登録すればChatGPTのようにチャットベースでやり取りができますが、個人情報の管理が問題視されています。

・ニュース記事:個人情報ダダ漏れ。まだまだ出てくるDeepSeekの脆弱性


また、入力/出力したデータは学習に使われることがあると利用規約には書かれています。

「最小限の範囲において」となっていますが、機密情報は入れない方がいいでしょう。

(業務で顧客情報をチャットで入力する、なんてことはしないように。)

4.3 In order to fulfill the requirements stipulated by laws and regulations or provide the Services specified in these Terms, and under the premise of secure encryption technology processing, strict de-identification rendering, and irreversibility to identify specific individuals, we may, to a minimal extent, use Inputs and Outputs to provide, maintain, operate, develop or improve the Services or the underlying technologies supporting the Services. If you refuse to allow us to process the data in the manner described above, you may provide feedback to us through the methods outlined in Section 10.

DeepSeek Terms of Use


以上のようなセキュリティリスクが話題になっています。

ただ、ありがたいことにDeepSeekは Hugging Faceでモデルが公開されているので、ローカルPCにダウンロードして利用することができます。

ローカルで動かす場合は、入出力データはDeepSeekのサーバに連携されることはないので学習もされません。

そのため、高精度なモデルを安全に使えるのでローカルで動かす人が多いと思います。

ローカルでLLMを動かすにはOllamaを使おう


Ollamaとは、大規模言語モデル(LLM)の推論を効率よく実行できるように設計されたオープンソースのツールです。

Hugging Faceで様々なLLMをダウンロードすることはできますが、それを動かすと、かなりメモリを使います。

スペックが高くないと出力(文字の生成)も遅いです。

そこで、Ollamaを使うと高スペックでないPCでもLLMを動かすことができるようになります!

今回はそんなOllamaを使って、DeepSeekを動かしたいと思います。


まず、Ollamaを使うにはダウンロードが必要になります。

Ollamaのサイトにアクセスし、「Download」ボタンからダウンロードします。

ダウンロードした exeファイルを実行したら作業は完了です。

Ollamaで使用できるモデルはGitHubで一覧化されています。

また、目安として7Bモデルは8GB、13Bモデルは16GBのRAMが必要と記載されています。

自分の環境にあったモデルをダウンロードしましょう!

You should have at least 8 GB of RAM available to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models.

https://github.com/ollama/ollama


DeepSeekを動かす

モデルのダウンロード

Ollamaで使用するにはモデルは「GGUF」形式である必要があります。

サイバーエージェントの学習済みDeepSeekモデルをDDUF形式に変換されたものが公開されています。

mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf


このモデルをローカルにダウンロードします。

「Use this model」から「Ollama」を選択すると、コマンドをコピーすることができます。

PowerShellでコピーしたコマンドを実行すればモデルがダウンロードできます。



ダウンロードが完了したら、「>>>Send a message」と表示されてDeepSeekと対話できるような状態になっていると思います。

対話を停止する場合は、「Ctrl + D」を実行します。

また、以下のコマンドでOllamaのモデルを一覧で確認できます。

ollama list


その他のコマンドはGitHubで確認できます。


PowerShellで動かす

早速、PowerShellでDeepSeekを動かしてみます。

ollama run で起動した後、DeepSeekに「こんにちは」と挨拶しました。

<think></think>の部分がDeepSeekが思考した過程で、考えた結果の返答が</think>の後に書かれています。

PS C:\Users> ollama run hf.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:Q4_K_M
>>> こんにちは
<think>
ユーザーが「こんにちは」と挨拶しています。まず、この挨拶にどう反応するか考えます。
日本語の会話では相手の挨拶を返すのが基本なので、「こんにちは」と答えるのが適切です。
次に、ユーザーがどのような意図で「こんにちは」を使ったのかを考える必要があります。
おそらく、最初の接触で友好的なスタートを切りたいのでしょう。あるいは、メッセージの開始として
使用している可能性もあります。さらに、ユーザーが日本語で会話する能力があることから、
深く考えて欲しいというリクエストかもしれません。そのためには、単なる挨拶に留めず、
適切に返答しつつ、次の質問を促すような言葉を選ぶ必要があります。
また、「こんにちは」に対しては一般的な返事を用意しますが、その後の会話の流れを考慮して柔軟に対応できるように準備が必
要です。ユーザーが具体的な質問を持っている場合、適切に答えられるように情報を整理する必要があります。
最後に、丁寧な言葉遣いを心掛けつつ、自然で親しみやすいトーンを維持することも重要です。これにより、ユーザーが安心して
会話を継続しやすくなります。
</think>

こんにちは!
どうぞよろしくお願いします😊
何かお手伝いできることがありましたら、ぜひお声かけくださいね!

(※こちらの返答は日本語で丁寧に応対し、次の質問を受け入れる準備ができていることを示すものです)


ユーザが入力してきたことに対して、どう考えているのかがわかりますね。

(こんにちは、だけでここまで考えさせるのは申し訳ないですが。。)


次はもう少し真面目な話を振ってみます。

「Pythonを1カ月でマスターする方法」を聞いてみました。長いのですが、結果がこちら。

>>> 私はプログラミングが苦手です。ただ、仕事でPythonを使うことになりました。
1カ月でPythonをマスターする方法を教えてください。

<think>
ユーザーはプログラミングが苦手ながら、仕事でPythonを使わなければならず、短期間(1ヶ月)で習得したいと望んでいます。
まず、この状況からユーザーの本音を探ります。表面上には単に技術的な質問ですが、
実際はスキル不足への不安や時間的制約によるプレッシャーを感じている可能性が高いです。
次に、短期間での習得が可能かどうかを検討します。1ヶ月で完全なマスターとは非現実的かもしれませんが、
実務レベルの活用までなら可能です。ただし、ユーザーが「マスターする」と言った場合、どの程度を指すのかを
明確にする必要があります。ユーザーが求めているのは、単なる技術的な知識だけでなく、学習方法やモチベーション維持策、
ストレス軽減法など多角的なサポートかもしれません。また、仕事での応用に即した実践的なアドバイスが欲しい可能性があります。
さらに、プログラミング初心者向けの教材選定や練習問題の推奨、学習計画の作成が必要です。
ただし、ユーザーの時間管理能力や集中力の持続を考慮し、過密すぎるカリキュラムは避けます。
バランスの取れたアプローチが望ましいでしょう。また、ユーザーが孤独に学ぶ不安があるかもしれませんので、
コミュニティへの参加やチューターの利用を勧めることが効果的です。これにより、継続的な学習と悩み解決につながります。
最後に、目標設定の重要性を伝える必要があります。具体的で達成可能な小目標を立てることで、モチベーション維持と実践力の
向上を目指せます。例えば、週次での進捗確認や短期間でのプロジェクト完了などが考えられます。
</think>

1ヶ月でPythonを「マスターする」ことは現実的ではありませんが、**実務レベルの応用まで到達し、基本的なスキルを確立する
ことは可能です**。ただし以下のポイントを押さえつつ、綿密な学習計画が必要です。
---

### **【3段階のアプローチ】**
#### 1. **「基礎を体に染み込ませる」1週間集中期**
- **教材**:
  - 実践的なチュートリアル: [Automate the Boring Stuff](https://automatetheboringstuff.com)(無料)・[Python for
Everybody](https://www.coursera.org/learn/python-basics)
  - 難易度:初心者向けの単純なコード例から始める
- **実践課題**:
  ```python
  # 要約した実務事例
  numbers = [1,2,3]
  print(f"合計値: {sum(numbers)}")  # 基本データ操作
  def calculate_discount(price):    # 関数の概念を体験
      return price * 0.95
  ```
- **学習法**:
  - 日1時間で「インプット→実践→復習」ループを繰り返す
  - 組み込みツール(`dir()`やドキュメンテーション)への慣れ

#### 2. **「応用力向上期」2週間**
- **必須スキル**:
  - データ操作(pandas)・ファイル読み書き(os, csv)
  ```python
  import pandas as pd
  df = pd.read_csv('data.csv')
  print(df.head())  # データ可視化の基本
  ```
- **プロジェクト例**:
  - 自己管理ツール作成(TODOリストや支出記録)
  - 情報分析:TwitterAPIでトレンドを取得

#### 3. **「実務適応期」残り1週間**
- **仕事に合わせたカスタマイズ**:
  - 業種特有のライブラリ(例:金融→`pandas`, 計算科学→`numpy`)
  - チームでの開発体験(GitHubでコード共有)
  ```python
  # 仕事向けサンプル
  def generate_report(data):
      report = {}
      total = sum(d['sales'] for d in data)
      report['total_sales'] = total
      return report
  ```
---

### **【失敗しないコツ】**
1. **「完璧主義」を捨てて**
   → 完全なコードより、まずは機能の一部で進める
2. **コミュニティ活用**:
   - [Stack Overflow](https://stackoverflow.com) で質問
   - コードレビューサイト(例:Codewars)
3. **定期的な評価**:
   - 無理せず週1回の進捗チェック
   - 時間管理アプリで学習時間を追跡
---

### **【現実的目標設定】**
- 「マスター」とは異なるが、**以下を達成すれば十分**:
  - 基本文法(条件分岐・ループ)の理解
  - 実務で即戦力として使える2~3つのライブラリ(例:pandas, requests)
  - 軽量な自動化スクリプト作成能力
---

「苦手意識を克服するため、最初の一週間は『失敗しても許される』環境を作りましょう。コードの『完成度』より、『コードが
動く瞬間の感覚』を重視してください」



いや、普通にすごいな…

特に<think>で質問文から「実際はスキル不足への不安や時間的制約によるプレッシャーを感じている可能性が高い」と読み取れているのがすごいですね。

プログラミングが苦手という情報を与えたので、そこから失敗しないコツや苦手意識をなくすようなアドバイスをしてくれました。

「ユーザーが孤独に学ぶ不安がある」からコミュニティへの参加を提案してくれていることがわかります。

思考した過程が見れるとユーザの意図を正しく捉えていることや回答の根拠がわかりやすくて便利な感じがしました。


Pythonで動かす

次にPythonでDeepSeekを使ってみます。

Ollamaのライブラリが必要なので、以下のコマンドでインストールしてください。

pip install ollama


呼び出すモデルの名前と、messagesのcontentに質問文を入れるだけです。簡単ですね。

import ollama

def main():
    response = ollama.chat(
        model="hf.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:Q4_K_M",
        messages=[
            {"role": "user", "content": "Pythonという言語を簡潔に説明してください。"}
        ],
    )
    print(response["message"]["content"])

if __name__ == "__main__":
    main()


<think>で思考している分、返却されるまで少し時間がかかります。

(簡潔に、と質問したら体感早く終わった気がします。)

<think>
まず、ユーザーがPythonについて知りたいと思っているので、基本的な情報を伝える必要がありますね。
Pythonの特徴や歴史、応用分野について簡単にまとめるのが良さそうです。
最初に、Pythonはどの年に開発されたか確認します。1989年で正解ですね。創始者はGuido van Rossumさんなので、
彼を名前で出すと親しみやすいかもしれません。
次に、なぜ人気があるのかという点です。シンプルな構文や、幅広い用途(Web開発、データ分析など)が挙げられます。
最近は機械学習にも使われているので、その部分も触れるといいでしょう。
でも、ユーザーが簡潔に説明してほしいと言っているので、冗長にならないように注意が必要です。
例えば、Pythonの最大の強みは何なのかを箇条書きにす ると分かりやすいかもしれません。
あと、具体的な例として有名フレームワークやツール(DjangoやNumPy)を挙げると、
実際の活用例が伝わりやすくなりますね。ただし、説明が長くなりすぎないようにバランスを取ります。
最後に、Pythonの未来について軽く触れることで、より深みのある回答になるでしょう。
例えば、AIやIoT分野での期待される役割などです。
全体として、分かりやすく簡潔にまとめることがポイントですね。専門用語を使いすぎず、
広く知られているフレームワークを具体的に挙げることで、ユー ザーが理解しやすくなります。
</think>

Python(パイソン)は、シンプルで直感的な構文を持つプログラミング言語です。
1989年にGuido van Rossum氏によって開発され、現在では幅広い分野(Web開発・AI・データ分析など)で利用されています。
最大の特徴は「コードを短く書けること」で、可読性と生産性が高く、初めて学ぶ人にも親しみやすい点が魅力です。
有名フレームワークにはDjango(Webアプリ開発)、NumPy・Pandas(データ分析)があります。
近年は機械学習やIoTなども盛んに使われています。



また、レスポンスをストリーミング形式で受け取ることもできます。

OllamaのGitHubページにサンプルコードが参考になります。

こちらの方がちゃんと処理が進んでいるのがわかっていいですね。

import ollama

def main():
    response = ollama.chat(
        model="hf.co/mmnga/cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:Q4_K_M",
        messages=[
            {"role": "user", "content": "Pythonという言語を簡潔に説明してください。"}
        ],
        stream=True,
    )
    for chunk in response:
        print(chunk["message"]["content"], end="", flush=True)

if __name__ == "__main__":
    main()



おわりに


Ollamaを使うと手軽にローカルLLMを動かすことができました。

DeepSeekはセキュリティ面で懸念がありつつも、オープンソースで無料で使えるのはありがたいです。

また、<think>による思考が見えると、回答の根拠もわかりますし使っていて面白いですね。


実際に手を動かすと理解も深まっていいですね。

RAGとかも興味があるので、時間があればローカルでやってみようかなと思います。


  • この記事を書いた人

ねぎねず

IT企業で働くエンジニア6年目。プログラミングや生成AIを勉強中。勉強や生活するなかで役に立った情報を発信していきます。

-プログラミング