# Κατασκευή ενός "δικηγόρου GPT" για το blog σας - Μέρος 2: Ρύθμιση GPU & CUDA σε C#

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

> ΠΡΟΕΙ∆ΟΠΟΙΗΣΗ: ΤΙΣ ΠΡΟΘΕΣΜΙΕΣ ΠΟΥ "ΠΕΡΙΛΑΜΒΑΝΟΝΤΑΙ."

Πιθανότατα πολλά από αυτά που είναι κάτω δεν θα δουλέψουν; Εγώ τα δημιουργώ ως το πώς-για μένα και στη συνέχεια να κάνουμε όλα τα βήματα και να πάρει το δείγμα εφαρμογή εργασίας...Έχετε sneaky και να τους δει! Θα είναι πιθανώς έτοιμα μέσα Δεκεμβρίου.

<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

> , θέσαμε το όραμα για την κατασκευή ενός βοηθού γραφής που χρησιμοποιεί το blog σας ως βάση γνώσεων - όπως το πώς οι δικηγόροι χρησιμοποιούν LLMs εκπαιδευμένα στη νομολογία για την κατάρτιση εγγράφων.

**Τώρα ήρθε η ώρα να λερώσουν τα χέρια μας με τα θεμέλια: να βεβαιωθείτε ότι η GPU σας είναι έτοιμη για την εργασία AI.**ΣΗΜΕΙΩΣΗ: Αυτό είναι μέρος των πειραμάτων μου με AI (βοηθητική σύνταξη) + δικό μου μοντάζ.

Ίδια φωνή, ίδιος πραγματισμός, απλά γρηγορότερα δάχτυλα.[Σχετικά με το υλικό μου](https://developer.nvidia.com/cuda-toolkit): Χρησιμοποιώ μια NVIDIA RTX A4000 (16GB VRAM), AMD Ryzen 9 9950X, και 96GB DDR5 RAM.[Αλλά δεν το χρειάζεσαι αυτό!](https://developer.nvidia.com/cudnn)Όπως καλύπτεται στο Μέρος 1, μπορείτε να χρησιμοποιήσετε οποιαδήποτε NVIDIA GPU με 8GB+ VRAM, ή ακόμη και να εκτελέσετε CPU-μόνο (χαμηλή αλλά λειτουργική).

[TOC]

## Αυτό το μέρος επικεντρώνεται στη ρύθμιση GPU, αλλά θα σημειώσω εναλλακτικές λύσεις μόνο για CPU, όπου χρειάζεται.

Αυτό το μέρος μπορεί να φαίνεται βασικό αν είστε ήδη εξοικειωμένοι με

### ΚΟΥΔΑConstellation name (optional, probably does not need a translation)

```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. **cuDNN**εγκαταστάσεις.
2. **Θα το κάνουμε από την αρχή.**Γιατί η επιτάχυνση της GPU έχει σημασία
3. **Πριν βουτήξουμε στην εγκατάσταση, ας καταλάβουμε γιατί χρειαζόμαστε καθόλου επιτάχυνση GPU.**CPU vs GPU για τα φορτία εργασίας AI
4. **Γιατί κυριαρχούν οι GPU για την AI**Παραλληλισμός

**- Οι GPU έχουν χιλιάδες πυρήνες εναντίον των CPUs.**Λειτουργίες MatrixName

- **- AI είναι ως επί το πλείστον μαθηματικά μήτρα, τα οποία GPUs excel σε**Εύρος ζώνης μνήμης
- **- Οι GPUs μετακινούν τα δεδομένα πολύ γρηγορότερα**Εξειδικευμένο υλικό

- Οι πυρήναι του τένσορα επιταχύνουν τις ειδικές λειτουργίες AI

**Παράδειγμα πραγματικού κόσμου**Δημιουργώντας παρεμβολές για ένα blog post:

- **CPU (Ryzen 9 9950X)**~5 δευτερόλεπτα ανά θέση
- **GPU (A4000 16GB)**~0.3 δευτερόλεπτα ανά θέση
- **Αυτό είναι 16x γρηγορότερο, και συντίθεται κατά την επεξεργασία εκατοντάδων θέσεων!**Επιδόσεις σε άλλους GPU
- (Περίπου):

## RTX règlement (7606) RTX règlement

(24GB): Γρηγορότερα, ~0.2 ανά θέση

### RTX 3060

(12GB): ~0.5 ανά θέση

- **GTX 1070 Ti**(8GB): ~0.8 ανά θέση
- **Ακόμα πιο γρήγορα από την ΚΜΕ!**Κατανόηση του υλικού σας
- **Πριν εγκαταστήσουμε οτιδήποτε, ας καταλάβουμε με τι δουλεύουμε.**Η GPU μου: NVIDIA RTX A4000
- **Αυτή είναι η ειδική GPU μου - μια επαγγελματική κάρτα σταθμού εργασίας με:**16GB GDDR6 VRAM

### - Αρκετά για 7B-13B μοντέλα παραμέτρων

6144 πυρήνας CUNDA

- Παράλληλη ισχύς επεξεργασίας
|-----|------|----------------|----------|
256 Πυρήνες τένσορ
- Επιταχθείσες λειτουργίες AI
CUDA Compute Pacity 8.6
- Σημαντικό για τη συμβατότητα
Κοινές επιλογές GPU
Εδώ είναι τι διάφορα GPUs μπορούν να χειριστούν:

### Το μέγιστο μέγεθος μοντέλου του GPU είναι ιδανικό για το GPU.

RTX REGIS 24GB 13B-30B 24GB 13B 30B Περισσότερες πληροφορίες για αυτό το έργο**~ RTX 4070 Ti ~ 12GB ~ 7B-13B ~ Εξαιρετική επιλογή ~**

**ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1 ΝΤ1**~ RTX 4060 Ti ~ 16GB ~ 7B-13B ~ Μεγάλη τιμή ~

**Α4000 (ορυχείο) 16GB 7B-13B**:

- ****Τι γίνεται με την Intel/AMD NPUs;
- **Μπορεί να έχετε ακούσει για τα τσιπς Intel Core Ultra ή AMD Ryzen AI με ενσωματωμένο NPU (Μονάδες Επεξεργασίας Νεύρων).**Μπορείς να χρησιμοποιήσεις αυτά αντί της NVIDIA;
- **Σύντομη απάντηση**Όχι ακόμα, αλλά ίσως το 2024-2025!
- **Σημερινοί περιορισμοί**Όχι CUDA

**: Οι ΝΠU δεν υποστηρίζουν το CUDA, το οποίο χρησιμοποιεί αυτό το φροντιστήριο**:

- Περιορισμένη υποστήριξη NET
- : Η υποστήριξη NPU του ONNX Runtime είναι πειραματική[Μοντέλο συμβατότητας](https://onnxruntime.ai/docs/execution-providers/DirectML-ExecutionProvider.html): Τα περισσότερα μοντέλα GGUF στοχεύουν CUDA/CPU
- Υποστήριξη DirectML

: Εξακολουθεί να ωριμάζει για LLMs**Εάν έχετε επεξεργαστή NPU εξοπλισμένη με NPU**Χρησιμοποιήστε τη λειτουργία CPU μόνο για τώρα (όλα λειτουργούν, απλά πιο αργά)

### Πρόσεχε

ONNX Runtime DirectML

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

ενημερώσεις

```
Name
NVIDIA RTX A4000
```

Μελλοντικά μέρη θα σημειώσουν όταν η υποστήριξη NPU βελτιώνεται

### Η σειρά αυτή επικεντρώνεται σε

NVIDIA CUNDA

```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 Driver
- **- Χαμηλού επιπέδου επικοινωνία GPU**Εργαλείο CUDA

## - APIs για τον προγραμματισμό GPU

cuDNN

```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
```

## - Βιβλιοθήκη Deep Neural Network (βελτιωμένοι πυρήνες)

### ONNX Runtime / LLamaSharp

- Υψηλού επιπέδου πλαίσια 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 Driver

### Ελέγξτε τον τρέχοντα οδηγό

Open PowerShell:`nvidia-smi`Θα πρέπει να δείτε έξοδο όπως:

1. Βασικές πληροφορίες[: Θα πρέπει να είναι 545.xx ή νεότερο](https://www.nvidia.com/Download/index.aspx)

2. : Αυτή είναι η έκδοση MAX CUDA υποστηρίζεται, όχι αυτό που είναι εγκατεστημένο
   
   - : Αυτή τη στιγμή χρησιμοποιείται / σύνολο VRAM**Ενημέρωση οδηγού εάν απαιτείται**
   - Εάν**δεν δουλεύει ή ο οδηγός σας είναι γέρος:**
   - Πήγαινε στο**Λήψεις οδηγών NVIDIA**
   - Επιλογή:**Τύπος προϊόντων:**RTX/Quadro
   - Σειρά προϊόντων:**RTX Axxx Series**Προϊόν:

3. RTX A4000

4. Λειτουργικό σύστημα:`nvidia-smi`

## Παράθυρα 11

(ή την εκδοχή σας)

### Τύπος λήψης:

**Studio Driver**(πιο σταθερό από το Παιχνίδι Έτοιμο)[Εγκατάσταση και επανεκκίνηση](https://developer.nvidia.com/cuda-toolkit)Επαληθεύστε ξανά με

- **Βήμα 2: Εργαλείο CUDA**Το CUDA παρέχει τη διεπαφή προγραμματισμού για την επιτάχυνση GPU.
- **Επιλογή έκδοσης**Κρίσιμη
- **: Χρειαζόμαστε**ΚΟΥΔΑConstellation name (optional, probably does not need a translation)

### 12.x για μοντέρνα μοντέλα.

1. Συγκεκριμένα:[CUDA 12.1+](https://developer.nvidia.com/cuda-toolkit-archive)
2. - Καλή ισορροπία συμβατότητας και χαρακτηριστικών (κατά τη στιγμή της γραφής)**Τελευταίες 12.x**- Ελέγξτε τη συμβατότητα με τις βιβλιοθήκες σας
3. NOT CUTA 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 (τοπική)

### Λήψη (~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: cudNN (CUDA Deep Neural Network library)**cuDNN παρέχει βελτιστοποιημένες εφαρμογές των εργασιών βαθιάς μάθησης.

### Συμβιβάσιμο έκδοσης

1. Κρίσιμη[cuDNN](https://developer.nvidia.com/rdp/cudnn-archive)
2. η έκδοση πρέπει να ταιριάζει με την έκδοση CUDA!
3. Για**CUDA 12. x**
4. , χρειαζόμαστε**cudNN 8.9+**
5. για CUDA 12.x (κατά τη στιγμή της γραφής, 8.9.7 ή αργότερα)

### Κατεβάστε το cudNN

Πήγαινε στο

**CUDNN Archive**Θα χρειαστείτε λογαριασμό προγραμματιστή 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\"
```

**Κατεβάστε cudNN v8.9.7 (5 Δεκεμβρίου, 2023), για CUDA 12.x**:

1. Επιλογή:`bin\`Τοπικός εγκαταστάτης για Windows (Zip)`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\`
2. Λήψη (~800MB)`include\`Εκχύλισμα και εγκατάσταση cuDNN`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include\`
3. CUDNN είναι μόνο ένα σύνολο αρχείων που αντιγράφετε στην εγκατάσταση 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
```

### έως

Επιβεβαίωση εγκατάστασης cudNN

**Βήμα 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`

Δοκιμή δειγμάτων CUDA (προαιρετικά αλλά συνιστώμενα)

## Το εργαλείο CUDA περιλαμβάνει προγράμματα δειγμάτων.

Ας συντάξουμε και να τρέξουμε ένα.

### Πλοήγηση σε δείγματα

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

### Βρείτε τη συσκευήQuery

[Σύνδεσέ το.](https://onnxruntime.ai/)(απαιτεί Visual Studio):

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

**Τρέξε το.**

- `Microsoft.ML.OnnxRuntime`Θα πρέπει να δείτε έξοδο όπως:
- `Microsoft.ML.OnnxRuntime.Gpu`Η γραμμή-κλειδί

### Αν το δείτε αυτό, η στοίβα GPU + CUDA + CUDNN λειτουργεί!

Βήμα 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
   - είναι ο ευκολότερος τρόπος για να χρησιμοποιήσετε CUDA από C#.

2. **Γιατί αυτό το πακέτο;**- Μόνο CPU
   
   - - Περιλαμβάνει υποστήριξη 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 ===
```

### SessionOptions.ApendExecutionProvider_CUDA()

#### - Λέει ONNX Runtime για τη χρήση GPU

**Αν αυτό πετύχει, η CUDA δουλεύει**Αν αποτύχει, κάτι στη στοίβα είναι σπασμένο.

**OrtEnv.Instance().GetAvailableProviders()**:

```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" ως fallback

**Εκτέλεση της δοκιμής**:

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

#### Αναμενόμενη έξοδος

**Αντιμετώπιση κοινών λαθών**Σφάλμα: "DllNotFoundΕκτός: Αδυναμία φόρτωσης του DLL 'onnxruntime'"

**Αιτία**: ONNX Runtime δεν μπορεί να βρει CUDA DLLs.

## Επιδιόρθωση

Σφάλμα: "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. **: Driver is too old for CUDA 12.x.**Επιδιόρθωση
   
   - : Ενημέρωση οδηγού NVIDIA στο 545.xx ή νεότερο.`[1, 1, 28, 28]`Προηγμένη δοκιμή: Πραγματικό συμπέρασμα

2. **Ας κάνουμε κάτι πραγματικό - τρέχει ένα μικρό νευρικό δίκτυο σε GPU έναντι CPU και να συγκρίνουν ταχύτητες.**Κατεβάστε ένα Test Model
   
   - Θα χρησιμοποιήσουμε ένα απλό μοντέλο αναγνώρισης ψηφίων MNIST (ONNX format).

3. **Κωδικός δοκιμής παρεμπίπτοντος**Ενημέρωση
   
   - Επεξήγηση κωδικού

4. **Πυκνός αισθητήρας**- Ο τρόπος του ONNX Runtime να αναπαριστά πολυδιάστατες συστοιχίες

### Σχήμα

```bash
dotnet run
```

**= batch_size=1, κανάλια=1, ύψος=28, πλάτος=28**NamedOnnxValue

```
=== 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
- Ζεστό τρέξιμο
- - Το πρώτο συμπέρασμα είναι πάντα πιο αργό (μοντέλο φόρτωσης, βελτιστοποίησης)

### Τρέχουμε μια φορά πριν από το χρόνο για να πάρει ακριβείς μετρήσεις

Μεθοδολογία συγχρονισμού
✅ 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+), θα δείτε 100-100x speedups
3. **Απομάκρυνση κλειδιούName**Έχουμε αποδείξει ότι όλη η στοίβα δουλεύει:

### Επιδόσεις κατανόησης

```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
```

**Μεταφορά μνήμης Bottleneck**:

- **Εδώ είναι τι συμβαίνει κατά τη διάρκεια των συμπερασμάτων:**Μαθήματα επιδόσεων
- **Επεξεργασία παρτίδας**- Μεταφέρετε πολλές εισροές αμέσως για να αποσβεστείτε από πάνω

Διατήρηση δεδομένων για GPU

- **- Αλυσιδωτές λειτουργίες για την αποφυγή μεταφορών**Μεγαλύτερα μοντέλα ωφελούν περισσότερο
- **- Σταθερό κόστος μεταφοράς, υπολογισμός κλιμάκωσης**Πότε να χρησιμοποιήσετε GPU έναντι CPU
- **Κανόνας του αντίχειρα**GPU

## - Μεγάλα μοντέλα, επεξεργασία παρτίδων, παραγωγή προσθήκης

CPU

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)

Για τον βοηθό μας στο blog:

## Ενσωμάτωση

- Διαδικασία παρτίδας 100+ κομμάτια → GPU**Συνέδρια LLM**- Μεγάλο μοντέλο (7B params) → GPU

- Αναζήτηση διάνυσμα
- - Εξαρτάται από την επιλογή DB, συχνά CPU-δεθεί
- Περίληψη
- Έχουμε πετύχει:
- και

Το αναπτυξιακό μας περιβάλλον είναι τώρα έτοιμο για το φόρτο εργασίας!

## Ποιο είναι το επόμενο;

### Το

```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` |
Φτιάχνουμε το πρώτο μας σημασιολογικό πρωτότυπο αναζήτησης.

### Θα αρχίσουμε επιτέλους να δουλεύουμε με πραγματικό περιεχόμενο blog και να βλέπουμε RAG σε δράση!

Αναφορά αντιμετώπισης προβλημάτων
|--------------|---------------|--------------|-----------------|
Γρήγορες διαγνωστικές εντολές
Κοινά θέματα
Σφάλμα Σφάλμα Αιτία Φτιάξε

## δεν βρέθηκε ο οδηγός δεν είναι εγκατεστημένος Εγκαταστήστε τον οδηγό NVIDIA

- [δεν βρέθηκε CUDA δεν στο PATH □ Προσθήκη κάδου CUDA στο PATH □](/blog/building-a-lawyer-gpt-for-your-blog-part1)
- **Το φορτίο DLL απέτυχε**Ο πάροχος CUDA δεν βρέθηκε □ Λάθος πακέτο NuGet □ Χρήση
- [Η έκδοση του οδηγού είναι ανεπαρκής... ο παλιός οδηγός... ..Ενημέρωση στο 545.xx+ ..](/blog/building-a-lawyer-gpt-for-your-blog-part3)
- [Συμβιβάσιμο έκδοσης Matrix](/blog/building-a-lawyer-gpt-for-your-blog-part4)
- [□ Έκδοση CUDA □ έκδοση CUDNN ? ONNX Runtime ? Απαιτούμενος οδηγός](/blog/building-a-lawyer-gpt-for-your-blog-part5)
- [12, 1 9, 7 1, 16, x 545.xx+ .](/blog/building-a-lawyer-gpt-for-your-blog-part6)
- [12, 3 9. 0 1. 17.x 546.xx+](/blog/building-a-lawyer-gpt-for-your-blog-part7)
- [11, 8 8, 2 1, 15, x 520.xx+](/blog/building-a-lawyer-gpt-for-your-blog-part8)

## Πλοήγηση σειράς

- [Μέρος 1: Εισαγωγή & Αρχιτεκτονική](https://docs.nvidia.com/cuda/)
- [Μέρος 2: Ρύθμιση GPU & 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