# Побудова " Lawier GPT " для вашого блогу - Частина 2: налаштування GPU і налаштування CUDA у C#

<!--category-- AI, LLM, CUDA, C#, GPU, AI-Article, mostlylucid.blogllm -->
<datetime class="hidden">2025-11-12T22:45</datetime>

> ПОПЕРЕДЖЕННЯ: ТАКІ ПОСТА, ЯКІ ВАЖЛИВІ.

Це, ймовірно, багато з того, що нижче не спрацює, я генерую їх як як як як як-до мене, а потім роблю всі кроки і отримати зразок додатку працює... ви були підступні і бачили їх! вони ймовірно будуть готові до середини грудня.

<img src="https://media1.tenor.com/m/_rQc7PIEqwQAAAAd/cat-hello-cat-peek.gif" height="300px" />
## Вступ

Ласкаво просимо в Другу частину![Вхід](/blog/building-a-lawyer-gpt-for-your-blog-part1)Частина 1

> Ми виклали бачення створення асистента з письма, який використовує ваш блог як ґрунт для знань, наприклад, як адвокати використовують LLM, вивчений на судовому розгляді, щоб розшифровувати документи.

**Пора запачкать наши руки базой: убедиться, что ваш спецназ готов к работникам.**ЗАУВАЖЕННЯ: це частина мого експерименту з комп'ютером (заступною чернеткою) + моїм власним редагуванням.

Той самий голос, той самий прагматизм, тільки швидші пальці.[Про моє обладнання](https://developer.nvidia.com/cuda-toolkit): Я використовую NVIDIA RTX A4000 (16GB VRAM), AMD Ruben 9950X і 96GB DDR5 RAM.[Але тобі це не потрібно!](https://developer.nvidia.com/cudnn)Як описано у розділі Частина 1, ви можете використовувати будь- яку програму NVIDIA GPU з 8GB+ VRAM або навіть виконувати тільки ЦП (повільне, але функціональне).

[TOC]

## Ця частина зосереджена на конфігурації процесора, але я буду звертати увагу на альтернативи, які стосуються процесора.

Ця частина може здаватися базовою, якщо ви вже знайомі з

### КУДА

```mermaid
graph LR
    A[AI Workload] --> B{Type?}
    B -->|Matrix Operations| C[GPU: 100x+ faster]
    B -->|Sequential Logic| D[CPU: Better]

    C --> E[Embedding Generation]
    C --> F[LLM Inference]
    C --> G[Vector Search]

    D --> H[Application Logic]
    D --> I[File I/O]

    class C gpu
    class E,F,G aiTasks

    classDef gpu stroke:#333,stroke-width:4px
    classDef aiTasks stroke:#333
```

**, але повірте мені - я змарнував незліченну кількість годин усування загадкових помилок, що ведуть до невідповідність версії, відсутніх змінних середовища або помилкових**:

1. **кДНunit description in lists**інсталяції.
2. **Ми зробимо це з самого початку.**Чому GPU прискорення справи
3. **Перед тим, як пірнати в інсталяцію, давайте зрозуміємо, чому нам взагалі потрібне прискорення процесора.**Процесор проти GPU для комп' ютерних завантажень
4. **Чому комп'ютери домінують на комп'ютері**Паралельне ставлення

**- У GPU тисячі ядер/ процесорів процесора**Дії матриці

- **- AI - в основному математика матриці, в якій GPU перевершує**Пропускна здатність пам' яті
- **- GPU переміщує дані набагато швидше**Спеціальне обладнання

- Ядери струменя прискорюють виконання дій, пов' язаних з ШІ

**Приклад реального світу**(на моєму комп' ютері): створення вбудувань для допису блогу:

- **Процесор (9 9950X)**: ~5 секунд на допис
- **GPU (A4000 16GB)**: ~0. 3 секунди на допис
- **16х швидче, і вона вступає в обробку сотень постів!**Швидкодія для інших GPU
- (Оплески)

## RTX 4090

(24GB): найшвидший, ~0. 2s на допис

### RTX 3060

(12GB): ~0. 5s на допис

- **GTX 1070 Ti**(8GB): ~0. 8s на допис
- **Все ще набагато швидше, ніж процесор!**Розуміння обладнання
- **Перш ніж встановити щось, давайте зрозуміємо, з чим ми працюємо.**Mій GPU: NVIDIA RTX A4000
- **Це моя особлива GPU - професійна робоча картка з:**16GB GDDR6 VRAM

### - Достаточно для моделей параметрів 7B- 13B

Ядери CUDA 6144

- Енергія паралельної обробки
|-----|------|----------------|----------|
256 Тензорові ядра
- Обов' язкові операції.
Контрольна здатність CUDA 8,6
- Важливо для сумісності
Загальні параметри GPU
Ось, що можуть зробити різні GPU:

### Д-р Харріс: "Гу-У-У-У-У-У-У-У-У-У-У-У-У!"

 RTX 4090 * 24GB} 13B-30B'sOverking for this project}** RTX 4070 Ti} 12GB} 7B-13B} = choice}**

** RTX 3060} 12GB} 7B} Бюджет-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------**РТХ 4060Ті 16ГБ} 7Б-13Б}Часте значення

** А4000 (мена)} 16GB} 7Б-13Б} Робоча точка GPU}**:

- ** GTX 1070 Ti} 8GB} 7B (tight)} Мінімальна життєздатність}**А як щодо Intel/AMD NPU?
- **Ви, можливо, чули про Intel Core Ultra або AMD Rizen чіпи AI з вбудованими NPU (Неерал-процесорними підрозділами).**Чи можете ви використати їх замість НВІДІЇ?
- **Коротка відповідь**Ще ні, але, можливо, у 2024-2025!
- **Поточні обмеження**Немає CUDA

**: NPUs не підтримує CUDA, яку використовує цей навчальний посібник**:

- Обмежена підтримка.NET
- : Підтримка NNX Runtime NPU є експериментальною[Сумісність з моделлю](https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html): Більшість моделей GGUF спрямовані на CUDA/CPU
- Підтримка DirectML

: Продовжує розвиватися LLM**Якщо на вашому комп' ютері встановлено процесор NPU**У поточній версії використовувати режим лише ЦП (все працює, лише повільніше)

### Спостерігати за

ONNX Runtime DirectML

```bash
# PowerShell
wmic path win32_VideoController get name
```

оновлення

```
Name
NVIDIA RTX A4000
```

Майбутні частини будуть зауважувати, коли покращується підтримка NPU

### Ця серія статей зосереджена на

НВІДІЯ

```mermaid
graph TB
    A[Your C# Application] --> B[ONNX Runtime / LLamaSharp]
    B --> C[CUDA Toolkit]
    C --> D[cuDNN Libraries]
    D --> E[NVIDIA Driver]
    E --> F[GPU Hardware]

    G[TensorRT] -.Optional.-> D

    class A,F endpoints
    class C,D,E install

    classDef endpoints stroke:#333,stroke-width:4px
    classDef install stroke:#333,stroke-width:2px

    subgraph "What We'll Install"
    C
    D
    E
    end
```

**тому що вона доросла і добре підтримується в NET, але концепції будуть перекладатися на NPU, як тільки екосистема наздожене!**:

- **Перевірте свою GPU**Спочатку перевірте, що Windows бачить ваш GPU:
- **Ви маєте побачити щось на зразок:**Або скористайтеся панеллю керування NVIDIA → Системна інформація → Показ.
- **Огляд архітектури**Ось як працює стос програмного забезпечення:
- **Розпад шару**Драйвер NVIDIA
- **- Обмін даними з GPU низького рівня**Набір інструментів CUDA

## - API для програмування GPU

кДНunit description in lists

```mermaid
graph LR
    A[1. NVIDIA Driver] --> B[2. CUDA Toolkit]
    B --> C[3. cuDNN]
    C --> D[4. Verify Install]
    D --> E[5. Test from C#]

    class A,B,C,D,E steps

    classDef steps stroke:#333,stroke-width:2px
```

## - Бібліотека з глибокими Neural Network (оптимізовані ядра)

### ONNX Runtime / LLamaSap

- Основи ML високого рівня

```bash
nvidia-smi
```

Ваша програма

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 546.33       Driver Version: 546.33       CUDA Version: 12.3    |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA RTX A4000   WDDM  | 00000000:01:00.0 Off |                  Off |
| 41%   32C    P8    10W / 140W |    345MiB / 16376MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
```

**- Наш код C#**:

- `Driver Version`Встановлення траєкторії
- `CUDA Version`Ось наказ, який ми встановимо (впорядкування має значення!):
- `Memory-Usage`Крок 1: Драйвер NVIDIA

### Перевірити поточний драйвер

Open PowerShell:`nvidia-smi`Ви повинні бачити вивід такий:

1. Інформація про ключ[: має бути 545. xx або новіший](https://www.nvidia.com/Download/index.aspx)

2. : Це версія MAX CUDA, а не встановленої
   
   - : Зараз використано / загалом VRAM**Оновити драйвер, якщо потрібно**
   - Якщо**не працює або ваш водій старий:**
   - Перейти до**Звантаження драйвера NVIDIA**
   - Вибір:**Тип продукту:**RTX/Quadro
   - Серія продукту:**Серія RTX**Продукт:

3. RTX A4000

4. Операційна система:`nvidia-smi`

## Вікна 11

(або ваша версія)

### Тип звантаження:

**Драйвер Studio**(Ще стабільніше, ніж готова гра)[Встановлення і перезавантаження](https://developer.nvidia.com/cuda-toolkit)Перевірити ще раз за допомогою

- **Крок 2: Набір інструментів CUDA**CUDA надає інтерфейс програмування для прискорення процесора.
- **Вибір версії**Критична
- **: Нам потрібно**КУДА

### 12х для сучасних моделей.

1. Зокрема:[CUDA 12. 1+](https://developer.nvidia.com/cuda-toolkit-archive)
2. - Хороший баланс сумісності та особливостей (на час написання)**Остання 12.x**- Перевірте сумісність з вашими бібліотеками
3. НЕ КУДА 11.x**- Не вистачає новіших моделей**
4. Звантажити і встановити

### Перейти до

Архів інструментів CUDA

```
Installation Type: Custom (Advanced)

Select Components:
✅ CUDA Toolkit
✅ CUDA Documentation
✅ CUDA Samples
✅ CUDA Visual Studio Integration
❌ GeForce Experience (not needed)
❌ NVIDIA Driver (already installed)
```

**Вибрати**Утиліта CUDA 12.1

### (або 12.3)

Виберіть:

```
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
```

Windows → x86_ 64 → 11 → exe (local)

### Звантаження (~3GB)

Параметри встановлення

**Запустити інструмент встановлення.**:

```powershell
$env:CUDA_PATH
# Should show: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1

$env:PATH -split ';' | Select-String CUDA
# Should show CUDA bin and libnvvp paths
```

**Коли запитано:**:

1. Чому існує звичай?**Ми не хочемо знижувати рівень нашого водія чи встановлювати ігрове програмне забезпечення.**:
   
   - Шлях до встановлення`This PC`Типовий шлях:

2. Але зауважте - нам знадобиться це для змінних середовища!**Встановити змінні середовища**Зазвичай, інструмент встановлення встановлює ці параметри, але перевірити:
   
   - `CUDA_PATH` = `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1`
   - `CUDA_PATH_V12_1` = `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1`

3. Перевірити у PowerShell`Path`Якщо немає, додавати вручну
   
   ```
   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp
   ```

4. **Відкрити**Змінні середовища

### Клацання правою кнопкою

```powershell
# Check CUDA compiler
nvcc --version

# Should output:
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2023 NVIDIA Corporation
# Built on Tue_Feb__7_19:32:13_Pacific_Standard_Time_2023
# Cuda compilation tools, release 12.1, V12.1.66
```

```powershell
# Check path resolves
where.exe nvcc
# Should show: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\nvcc.exe
```

## → Властивості → Додаткові системні параметри → Змінні середовища

Під

### Системні змінні

**, перевірка/додаток:**: [Вхід](https://developer.nvidia.com/cudnn)змінна, гарантуйте існування таких змінних:

Перезапустити термінал**наслідувати зміни**Перевірити встановлення CUDA**Крок 3: KuDN (CUDA глибока невербальна бібліотека мережі)**cDN є оптимізованою реалізацією глибоких навчальних операцій.

### Сумісність з версіями

1. Критична[кДНunit description in lists](https://developer.nvidia.com/rdp/cudnn-archive)
2. Версія має відповідати версії CUDA!
3. for**CUDA 12.x**
4. , нам потрібно**cuDN 8. 9+**
5. для CUDA 12.x (на час написання, 8,9,7 або пізніш)

### Звантажити cuDN

Перейти до

**Архів cuDN**Вам потрібен обліковий запис розробника NVIDIA (безкоштовний)

```
cudnn-windows-x86_64-8.9.7.29_cuda12-archive\
    bin\
        cudnn64_8.dll
        cudnn_adv_infer64_8.dll
        cudnn_adv_train64_8.dll
        ... (more DLLs)
    include\
        cudnn.h
        ... (header files)
    lib\
        x64\
            cudnn.lib
            ... (lib files)
```

**Знайти:**:

```powershell
# Assuming you extracted to Downloads and CUDA is in default location
# Run PowerShell as Administrator

$cudnnPath = "$env:USERPROFILE\Downloads\cudnn-windows-x86_64-8.9.7.29_cuda12-archive"
$cudaPath = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1"

# Copy DLLs
Copy-Item "$cudnnPath\bin\*.dll" -Destination "$cudaPath\bin\"

# Copy headers
Copy-Item "$cudnnPath\include\*.h" -Destination "$cudaPath\include\"

# Copy libs
Copy-Item "$cudnnPath\lib\x64\*.lib" -Destination "$cudaPath\lib\x64\"
```

**Звантажити cuDN v8. 9. 7 (5 грудня 2023) для CUDA 12. x**:

1. Вибір:`bin\`Локальний встановлювач для Windows (Zip)`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\`
2. Звантаження (~800МБ)`include\`Видобути і встановити cuDN`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include\`
3. cuDN - це лише набір файлів, які ви копіюєте у вашу систему CUDA.`lib\x64\`Видобути ZIP`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64\`

### , побачиш:

```powershell
# Check DLLs exist
Test-Path "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cudnn64_8.dll"
# Should return: True

# List all cuDNN DLLs
Get-ChildItem "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cudnn*.dll"
```

## Копіювати файли до встановленого CUDA

Або зробіть це вручну

### Копіювати всі файли з

```powershell
nvidia-smi
```

до

### Копіювати всі файли з

```powershell
nvcc --version
```

до

### Копіювати всі файли з

```powershell
# All these should return paths
$env:CUDA_PATH
$env:CUDA_PATH_V12_1

# Check PATH includes CUDA bin
$env:PATH -split ';' | Select-String CUDA
```

### до

Перевірити встановлення cuDN

**Крок 4: повна перевірка**:

```powershell
cd "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v12.1"
```

**Переконаймося, що все працює разом.**:

```powershell
cd "1_Utilities\deviceQuery"
```

**Перевірка обладнання**Потрібно показати вашу програму GPU без помилок.

```powershell
# If you have VS 2022
"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" deviceQuery_vs2022.vcxproj /p:Configuration=Release /p:Platform=x64
```

**Перевірка CUDA**:

```powershell
.\x64\Release\deviceQuery.exe
```

Визначає, чи слід показувати CUDA 12. 1 (або будь- яку версію, яку ви встановили).

```
CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA RTX A4000"
  CUDA Driver Version / Runtime Version          12.3 / 12.1
  CUDA Capability Major/Minor version number:    8.6
  Total amount of global memory:                 16376 MBytes (17174683648 bytes)
  (048) Multiprocessors, (128) CUDA Cores/MP:    6144 CUDA Cores
  GPU Max Clock rate:                            1560 MHz (1.56 GHz)
  Memory Clock rate:                             7001 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 4194304 bytes
  ...
  Result = PASS
```

**Перевірка системних змінних**: `Result = PASS`

Перевірка SUDA (Необов' язкові, але рекомендовані)

## Інструмент "CUDA" включає в себе зразки програм.

Давайте компілювати і запускати один.

### Перейти до зразків

```bash
mkdir CudaTest
cd CudaTest
dotnet new console -n CudaTest
cd CudaTest
```

### Знайти питання про пристрій

[Скомпілювати](https://onnxruntime.ai/)(обов'язково Visual Studio)

```bash
dotnet add package Microsoft.ML.OnnxRuntime.Gpu  # Latest version
```

**Запустити**

- `Microsoft.ML.OnnxRuntime`Ви повинні бачити вивід такий:
- `Microsoft.ML.OnnxRuntime.Gpu`Рядок ключа

### Якщо ви бачите це, ваша база GPU + CUDA + cuDN працює!

Крок 5: Перевірка з C#`Program.cs`:

```csharp
using Microsoft.ML.OnnxRuntime;
using System;
using System.Linq;

namespace CudaTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== CUDA Test from C# ===\n");

            // Test 1: Can we create a CUDA execution provider?
            Console.WriteLine("Test 1: CUDA Execution Provider");
            try
            {
                var cudaProviderOptions = new OrtCUDAProviderOptions();
                var sessionOptions = new SessionOptions();
                sessionOptions.AppendExecutionProvider_CUDA(cudaProviderOptions);

                Console.WriteLine("✅ CUDA execution provider created successfully");
                Console.WriteLine($"   Device ID: {cudaProviderOptions.DeviceId}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"❌ Failed to create CUDA provider: {ex.Message}");
                return;
            }

            // Test 2: Check available providers
            Console.WriteLine("\nTest 2: Available Execution Providers");
            var providers = OrtEnv.Instance().GetAvailableProviders();
            foreach (var provider in providers)
            {
                Console.WriteLine($"   - {provider}");
            }

            if (providers.Contains("CUDAExecutionProvider"))
            {
                Console.WriteLine("✅ CUDA provider is available");
            }
            else
            {
                Console.WriteLine("❌ CUDA provider NOT available");
            }

            // Test 3: Get CUDA device count and info
            Console.WriteLine("\nTest 3: CUDA Device Information");
            try
            {
                // ONNX Runtime doesn't expose deviceQuery directly,
                // but we can test by trying to create a session
                var opts = new SessionOptions();
                opts.AppendExecutionProvider_CUDA(0); // Device 0

                Console.WriteLine("✅ Successfully configured for CUDA device 0");
                Console.WriteLine("   (Full device info requires native CUDA calls)");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"❌ CUDA device configuration failed: {ex.Message}");
            }

            Console.WriteLine("\n=== Test Complete ===");
        }
    }
}
```

**А тепер найцікавіша частина - давайте використаємо CUDA з C#!**:

1. **Створити тестовий проект**Додати ONNX Runtime з CUDA
   
   - `DeviceId`ONNX Runtime
   - Це найпростіший спосіб використання SUDA з C#.

2. **Чому цей пакет?**- Тільки ЦП
   
   - - Включає підтримку CUDA
   - Тестовий код: виявлення GPU

3. **Створити**Розпад коду
   
   - OrtCUDAProviderOptions
   - - Налаштовує виконання CUDA

### - Який GPU використовувати (0 для першого GPU)

```bash
dotnet run
```

**Можна встановити обмеження на пам' ять, рівень оптимізації тощо.**:

```
=== CUDA Test from C# ===

Test 1: CUDA Execution Provider
✅ CUDA execution provider created successfully
   Device ID: 0

Test 2: Available Execution Providers
   - CUDAExecutionProvider
   - CPUExecutionProvider
✅ CUDA provider is available

Test 3: CUDA Device Information
✅ Successfully configured for CUDA device 0
   (Full device info requires native CUDA calls)

=== Test Complete ===
```

### Options.AppendExecutionProvider_ CUDA})

#### - Накажет ONX running to use GPU

**Якщо це вдасться, SUDA працює**Якщо він зазнає невдачі, щось у стеці буде розбито.

**OrtEnv. Instance}.GetAvaiableProviders})**:

```powershell
# Make sure CUDA bin is in PATH
$env:PATH += ";C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin"

# Verify cudnn DLL exists
Test-Path "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cudnn64_8.dll"

# Try running again
dotnet run
```

#### - Показує список всіх доступних провайдерів виконання

**Має включати "CUDAExecutionProvider ," якщо все було встановлено правильно**Також показує "CPUExecutionProvider " як зворотний зв' язок

**Запустити перевірку**:

```bash
dotnet remove package Microsoft.ML.OnnxRuntime
dotnet add package Microsoft.ML.OnnxRuntime.Gpu --version 1.16.3
```

#### Очікувався вивід

**Вирішення загальних помилок**Помилка: " DllNotFoundExcoding: неможливо завантажити DLL 'onxruntime'

**Причина**: ONX Runtime не може знайти CUDE DLS.

## Виправити

Помилка: "CUDAExecutionProvider не знайдено"

### Причина

: Використання неправильного пакунка Runtime ONNX (лише CPU).

```powershell
# Download sample model
Invoke-WebRequest -Uri "https://github.com/onnx/models/raw/main/vision/classification/mnist/model/mnist-8.onnx" -OutFile "mnist.onnx"
```

### Виправити

Помилка: " Код помилки CUDA: 35 (версія драйвера CUDA недостатньо) "`Program.cs`:

```csharp
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
using System;
using System.Diagnostics;
using System.Linq;

namespace CudaTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== GPU vs CPU Inference Test ===\n");

            // Create dummy input (28x28 image flattened to 784 floats)
            var inputData = Enumerable.Range(0, 784).Select(i => (float)i / 784).ToArray();
            var tensor = new DenseTensor<float>(inputData, new[] { 1, 1, 28, 28 });
            var inputs = new List<NamedOnnxValue>
            {
                NamedOnnxValue.CreateFromTensor("Input3", tensor)
            };

            // Test 1: CPU Inference
            Console.WriteLine("Test 1: CPU Inference");
            var cpuTime = TestInference(inputs, useCuda: false, iterations: 100);
            Console.WriteLine($"   Average time: {cpuTime:F2}ms\n");

            // Test 2: GPU Inference
            Console.WriteLine("Test 2: GPU Inference");
            var gpuTime = TestInference(inputs, useCuda: true, iterations: 100);
            Console.WriteLine($"   Average time: {gpuTime:F2}ms\n");

            // Compare
            Console.WriteLine("Comparison:");
            Console.WriteLine($"   CPU: {cpuTime:F2}ms");
            Console.WriteLine($"   GPU: {gpuTime:F2}ms");
            Console.WriteLine($"   Speedup: {cpuTime / gpuTime:F2}x faster on GPU");
        }

        static double TestInference(List<NamedOnnxValue> inputs, bool useCuda, int iterations)
        {
            var options = new SessionOptions();

            if (useCuda)
            {
                options.AppendExecutionProvider_CUDA(0);
            }

            using var session = new InferenceSession("mnist.onnx", options);

            // Warmup run (first run is always slower)
            session.Run(inputs);

            // Timed runs
            var sw = Stopwatch.StartNew();

            for (int i = 0; i < iterations; i++)
            {
                using var results = session.Run(inputs);
                // Force evaluation
                var output = results.First().AsEnumerable<float>().ToArray();
            }

            sw.Stop();

            return sw.Elapsed.TotalMilliseconds / iterations;
        }
    }
}
```

**Причина**:

1. **: Водій застарий для СУДА 12.x.**Виправити
   
   - : Оновити драйвер NVIDIA до 545. xx або новішого драйвера.`[1, 1, 28, 28]`Додаткова перевірка: Поточна несуттєвість

2. **Давайте зробимо щось реальне - запустимо крихітну нейронну мережу на процесорі процесора і порівняймо швидкість.**Звантажити випробувальну модель
   
   - Ми використаємо просту модель розпізнавання цифр MNIST.

3. **Тестовий код індексу**Оновити
   
   - Пояснення коду

4. **DenseTensor**- ONX Runtime - це багатовимірні масиви

### Форма

```bash
dotnet run
```

**= пакетний_ розмір=1, канали=1, висота=28, Ширина=28**Названо OnnxValue

```
=== GPU vs CPU Inference Test ===

Test 1: CPU Inference
   Average time: 0.42ms

Test 2: GPU Inference
   Average time: 0.15ms

Comparison:
   CPU: 0.42ms
   GPU: 0.15ms
   Speedup: 2.80x faster on GPU
```

**- Прив' язка десятини до назви вхідних даних**

- " Input3 " - це вхідна назва у моделі MNIST
- Програма для розмиванняComment
- - Перший варіант завжди повільніший (модельоване завантаження, оптимізація)

### Ми бігаємо один раз перед тим, як отримати точні виміри

Часова методологія
✅ Driver installed correctly
✅ CUDA Toolkit accessible
✅ cuDNN integrated
✅ ONNX Runtime finds CUDA
✅ C# can run GPU-accelerated inference

## - Середнє більше 100 ітерацій для стабільних результатів.

### Перевірка швидкодії

Очікувався вивід

```mermaid
sequenceDiagram
    participant App as C# Application
    participant CPU as CPU Memory
    participant GPU as GPU Memory
    participant Compute as GPU Cores

    App->>CPU: Create input tensor
    CPU->>GPU: Transfer input (PCIe)
    Note over GPU: Slow! ~16GB/s
    GPU->>Compute: Execute model
    Note over Compute: Fast! TFLOPS
    Compute->>GPU: Write output
    GPU->>CPU: Transfer output (PCIe)
    Note over GPU: Slow again!
    CPU->>App: Return results
```

**(Ваші числа будуть змінюватися):**:

1. **Чому так швидко?**MNIST - крихітна (лише 100KB модель)
2. **Домінує надголова передачі даних GPU**Для більших моделей (1GB+) ви побачите 10- 100x пришвидшень
3. **Захоплення ключа**Ми довели, що все стеку працює.

### Розуміння швидкодії

```mermaid
graph TD
    A[Inference Request] --> B{Model Size}
    B -->|< 100MB| C{Batch Size}
    B -->|> 100MB| D[Use GPU]

    C -->|Single Item| E[Use CPU]
    C -->|Batch > 10| D

    D --> F[10-100x Faster]
    E --> G[Lower Latency for Single]

    class D,E choice

    classDef choice stroke:#333,stroke-width:2px
```

**Пляшка для перенесення пам' яті**:

- **Ось що відбувається під час підрахунків:**Уроки швидкодії
- **Пакетна обробка**- Перенести багато вхідних даних одночасно для амортизації над головою

Зберігати дані на GPU

- **- Ланцюжки для уникнення трансфертів**Більші моделі корисніші
- **- Фіксована вартість передавання, обчислення**Коли використовувати процесор GPU
- **Правило великого пальця**GPU

## - Великі моделі, пакетна обробка, створення вбудовування

Процесор

1. ✅ Installed NVIDIA driver (545.xx+)
2. ✅ Installed CUDA Toolkit 12.1
3. ✅ Integrated cuDNN 8.9.7
4. ✅ Verified with `nvidia-smi`- Маленькі моделі, одинарні запити, критичні за запізнення`nvcc`
5. ✅ Tested GPU access from C# with ONNX Runtime
6. ✅ Ran performance comparison (GPU vs CPU)

Для нашого помічника запису блогу:

## Вбудовані

- Пакетний процес 100+ шматки → ГПУ**Підсумок LLM**- Велика модель (7Б парам) → ГПУ

- Векторний пошук
- - Залежить від вибору DB, часто ЦП- об' єм даних
- Зведення
- Ми успішно:
- і

Наше середовище розробки тепер готове до роботи комп' ютера з комп' ютером I!

## Що далі?

### Вхід

```powershell
# Check GPU
nvidia-smi

# Check CUDA
nvcc --version
where.exe nvcc

# Check cuDNN
Test-Path "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cudnn64_8.dll"

# Check environment
$env:CUDA_PATH
$env:PATH -split ';' | Select-String CUDA

# Test from C#
dotnet run
```

### Частина 3

, ми зануримося глибоко в вбудовування і векторні бази даних:
|-------|-------|-----|
| `nvidia-smi`Що таке вбудовування і як вони уможливлюють семантичний пошук?
| `nvcc`Вибір між Qdrant, pgvector та іншими параметрами
Створення локальних вбудовування за допомогою ONNX Runtime
Ефективно зберігати і розпитувати мільйони векторів`Microsoft.ML.OnnxRuntime.Gpu` |
Побудова нашого першого прототипу семантичного пошуку

### Нарешті ми почнемо роботу з справжнім вмістом блогу і побачимо, як працює RAG!

Посилання на розв' язання проблем
|--------------|---------------|--------------|-----------------|
Швидкі команди діагностики
Загальні питання
♪

## не знайдено}Тебе не встановлено}Часи не встановлено драйвер NVIDIA}

- [не знайдено ♪ COUDA не у PATH ♪ Додати CUDA bin до PATH ♪](/blog/building-a-lawyer-gpt-for-your-blog-part1)
- ** Не вдалося завантажити файли cODN пропущено} Копіювати cODN до CUDA}**} Провайдер CODA не знайдений} Ні, пакет NOGE} Використовуйте
- [Версія старішого драйвера}Візьмімо 545.xx+}](/blog/building-a-lawyer-gpt-for-your-blog-part3)
- [Сумісність з версіями Матриця](/blog/building-a-lawyer-gpt-for-your-blog-part4)
- [ {\3cHFFFF00} {\cHFFFF00} {\cH80FF00} {\cHFFFF00} {\cH80FF00} {\cH80FF00}Часично](/blog/building-a-lawyer-gpt-for-your-blog-part5)
- [](/blog/building-a-lawyer-gpt-for-your-blog-part6)
- [*](/blog/building-a-lawyer-gpt-for-your-blog-part7)
- [ 8. 9. 2} 1. 15. x} 520. xx+}](/blog/building-a-lawyer-gpt-for-your-blog-part8)

## Серія Навігація

- [Частина 1: Вступ і архітектура](https://docs.nvidia.com/cuda/)
- [Частина 2: налаштування і налаштування CUDA у C#](https://docs.nvidia.com/deeplearning/cudnn/api/index.html)
- [(це повідомлення)](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html)
- [Частина 3: Розуміння вбудовування баз даних та векторів](https://developer.nvidia.com/)

Частина 4.[Частина 5: Клієнт Windows](/blog/building-a-lawyer-gpt-for-your-blog-part3)Частина 6: Інтеграція локального LLM