2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでCUDA Toolkit・cuDNNを導入してollamaでdeepseekを動かす方法

Posted at

WindowsでCUDA Toolkit・cuDNNを導入してollamaでdeepseekを動かす方法

この記事では、Windows環境でCUDA ToolkitとcuDNNを導入し、ollamaを使用してdeepseekモデルを動かすまでの手順を説明します。

前提条件

  • Windows 10/11
  • NVIDIA GPU搭載のPC
  • 管理者権限を持つアカウント

1. NVIDIA ドライバーの確認

まず、最新のNVIDIAドライバーがインストールされていることを確認します。

  1. Windowsキー + Xを押し、「デバイスマネージャー」を選択
  2. 「ディスプレイアダプター」を展開し、NVIDIAグラフィックスカードが正しく認識されていることを確認
  3. 必要に応じてNVIDIAドライバーダウンロードページから最新ドライバーをインストール

2. CUDA Toolkitのインストール

  1. CUDA Toolkitダウンロードページにアクセス
  2. 以下の選択肢を選んでダウンロード:
    • Operating System: Windows
    • Architecture: x86_64
    • Version: Windows 11(またはお使いのWindowsバージョン)
    • Installer Type: exe(local)
      001.png
      002.png
  3. ダウンロードしたインストーラーを実行
    003.png
    004.png
  4. インストールオプションで「Express(推奨)」を選択
    005.png
    006.png
  5. インストールが完了するまで待機
    007.png
    008.png

インストール完了後、環境変数が自動的に設定されます。

3. cuDNNのインストール

  1. cuDNNダウンロードページにアクセス
  2. インストールしたCUDA Toolkitのバージョンに対応するcuDNNをダウンロード
    009.png
  3. ダウンロードしたインストーラーを実行
    010.png
  4. ライセンス契約に同意し、インストールを完了
    011.png
    012.png
    013.png

4. ollamaのインストール

  1. ollama公式サイトからWindowsインストーラーをダウンロード
    014.png
  2. ダウンロードしたインストーラーを実行
    015.png
  3. インストールウィザードの指示に従ってインストール
    016.png
  4. インストール完了後、Windows PowerShellまたはコマンドプロンプトを開く

5. deepseekモデルのダウンロードと実行

  1. PowerShellまたはコマンドプロンプトで以下のコマンドを実行:
ollama run deepseek-r1:14b-qwen-distill-q4_K_M
  1. モデルのダウンロードが開始されます(約9GB):
pulling manifest
pulling 6e9f90f02bb3... 100% ▕████████████████████████████████████████▏ 9.0 GB
pulling 369ca498f347... 100% ▕████████████████████████████████████████▏  387 B
pulling 6e4c38e1172f... 100% ▕████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd... 100% ▕████████████████████████████████████████▏  148 B
pulling 3c24b0c80794... 100% ▕████████████████████████████████████████▏  488 B
verifying sha256 digest
writing manifest
success
  1. ダウンロードが完了すると、対話が可能になります

動作確認

以下のような質問を入力して、モデルの動作を確認できます:

  • プロンプト
c10k問題の解決法を教えて
  • 回答
>>> c10k問題の解決法を教えて
<think>

</think>

"C10K" は、Web インターフェイスやネットワーク アプリケーションでありがちな「同期処理」に関する問題です。具体的には、1 腰のポート番号しか開けられないため、大量の接続要求(例: 10,000 件)に対応できない状況を指します。     
  

### 問題の背景
- **同期処理**:アプリケーションが I/O (入出力) 操作中にブロックされてしまう状態。例えば、ソケット通信やファイル アクセス時。
- **ポート番号の制限**:OS は有限なポート番号(0-65535)しか開けません。大量の接続要求がある場合、ポート番号が不足し、処理できない状況が発生します。

### 解決法
以下に、C10K 問題を解決する一般的な方法を説明します。

---

### 1. **非同期プログラミング(Asynchronous Programming)**
- **メリット**:I/O 操作中にアプリケーションがブロックしないようにし、大量の接続に対応できる。
- **具体例**:
  - ** epoll(Linux)**: 高速なイベント通知机制を用いて、非同期処理を実現。
  - ** select() / poll()**: 複数のソケットの状態を監視し、I/O 完了時に処理を行う。
  - **reactor 橈式(Reactor Pattern)**: ソケットイベント駆動型の非同期プログラミング モデル。

---

### 2. **_threads (マルチスレッド)**
- **メリット**:それぞれの接続を独立したスレッドで処理し、ポート番号の制限を回避。
- **具体例**:
  - ** pthread(Linux)**: 多線程プログラミング。
  - **std::thread(C++)**: C++11 以降で標準化されたマルチスレッドサポート。

---

### 3. **プロトコル切り替え**
- **メリット**:ポート番号の制限を回避する代わりに、違う通信方式を使う。
- **具体例**:
  - ** UDP**: ポート番号の消費が少ない(1つのソケットで複数の送信先に対応可能)。
  - ** WebSocket**: 高速な双方向通信を実現し、ポート番号の制限を最小限にする。

---

### 4. **リングバッファやメッセージクエュー**
- **メリット**:大量の接続要求を効率的に処理するための機構。
- **具体例**:
  - ** epoll + ring buffer**: 高速なイベント駆動とリングバッファでデータ受け渡しを行う。
  - **ZeroMQ**: 分散メッセージング クラステクノロジー。

---

### 5. **OS レベルの最適化**
- **メリット**:OS の設定を調整して、ポート番号の利用率を高める。
- **具体例**:
  - ** tcp_tw_reuse**: TIME_WAIT ステート中のソケットを再利用可能にする。
  - ** SOMAXCONN**: listen() 関数の待ち受けキューの長さを増やす。

---

### 6. **マイクロサービス化**
- **メリット**:アプリケーションを分散させ、ポート番号の負担を軽減。
- **具体例**:
  - ** Docker + Kubernetes**: 容器技術でアプリケーションをスケールアウト。
  - **API Gateway**: 外部から届くリクエストを分散処理するゲートウェイを導入。

---

### 7. **ポート番号の共有**
- **メリット**:同一ポート番号を使用しながら、接続を管理する。
- **具体例**:
  - **Nginx**: 負载均衡機能で大量の接続を分散。
  - **HAProxy**: 高可用性と負载均衡を実現するプロキシサーバ。

---

### 8. **メッセージ キューング システム**
- **メリット**:接続要求をバッチ処理し、ポート番号の使用を最小限にする。
- **具体例**:
  - ** RabbitMQ**: メッセージ キューング クラステクノロジー。
  - **Kafka**: 高速なメッセージ トラフfic 处理。

---

### 9. **モバイル/分散型 アrchitecture**
- **メリット**:アプリケーションを分散させ、ポート番号の負担を軽減。
- **具体例**:
  - **Lambda 関数(AWS)**: 雲計算サービスで処理をスケールアウト。
  - **grpc**: 高速な RPC プロトコルを用いて分散システムを構築。

---

### 10. **ポート番号の再利用**
- **メリット**:同じポート番号を複数回使用し、接続数を増やす。
- **具体例**:
  - ** TCP Fast Open**: 新しい接続で既存のポート番号を_REUSE。
  - **Nagle 算法**: 小さなパケットを結合し、通信効率を向上。

参考リンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?