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

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

Wednesday, 12 November 2025

//

20 minute read

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

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

## Εισαγωγή

Καλώς ήρθατε στο δεύτερο μέροςΤοΜέρος 1

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

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

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

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

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

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

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 είναι πειραματικήΜοντέλο συμβατότητας: Τα περισσότερα μοντέλα GGUF στοχεύουν CUDA/CPU
  • Υποστήριξη DirectML

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

Πρόσεχε

ONNX Runtime DirectML

# PowerShell
wmic path win32_VideoController get name

ενημερώσεις

Name
NVIDIA RTX A4000

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

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

NVIDIA CUNDA

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

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
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 ή νεότερο

  2. : Αυτή είναι η έκδοση MAX CUDA υποστηρίζεται, όχι αυτό που είναι εγκατεστημένο

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

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

Παράθυρα 11

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

Τύπος λήψης:

Studio Driver(πιο σταθερό από το Παιχνίδι Έτοιμο)Εγκατάσταση και επανεκκίνησηΕπαληθεύστε ξανά με

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

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

  1. Συγκεκριμένα:CUDA 12.1+
    • Καλή ισορροπία συμβατότητας και χαρακτηριστικών (κατά τη στιγμή της γραφής)Τελευταίες 12.x- Ελέγξτε τη συμβατότητα με τις βιβλιοθήκες σας
  2. NOT CUTA 11.x- Λείπει χαρακτηριστικά νεότερα μοντέλα χρειάζονται
  3. Κατεβάστε & Εγκαταστήστε

Πήγαινε στο

Αρχείο εργαλείων 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)

Επιλογές εγκατάστασης

Τρέξε τον εγκαταστάτη.:

$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. Έλεγχος σε PowerShellPathΕάν λείπει, προσθέστε με το χέρι

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp
    
  4. ΆνοιγμαΜεταβλητές περιβάλλοντος

Δεξί κλικ

# 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
# Check path resolves
where.exe nvcc
# Should show: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\nvcc.exe

→ Ιδιότητες → Προηγμένες ρυθμίσεις συστήματος → Μεταβλητές περιβάλλοντος

Κάτω

Μεταβλητές συστήματος

, επαληθεύστε/προσθέστε:: ΤοΜεταβλητή, εξασφαλίζει την ύπαρξη τους:

Ξαναξεκινήστε το τερματικό σαςγια αλλαγές που πρέπει να τεθούν σε ισχύΕπιβεβαίωση εγκατάστασης CUDA**Βήμα 3: cudNN (CUDA Deep Neural Network library)**cuDNN παρέχει βελτιστοποιημένες εφαρμογές των εργασιών βαθιάς μάθησης.

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

  1. ΚρίσιμηcuDNN
  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)

Αναζήτηση::

# 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\Εκχύλισμα και εγκατάσταση cuDNNC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include\
  3. CUDNN είναι μόνο ένα σύνολο αρχείων που αντιγράφετε στην εγκατάσταση CUDA σας.lib\x64\Εκχύλισμα του ZIPC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64\

, θα δείτε:

# 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

Ή κάντο χειροκίνητα.

Αντιγραφή όλων των αρχείων

nvidia-smi

έως

Αντιγραφή όλων των αρχείων

nvcc --version

έως

Αντιγραφή όλων των αρχείων

# 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: Πλήρης επαλήθευση:

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

Ας σιγουρευτούμε ότι όλα θα πάνε καλά.:

cd "1_Utilities\deviceQuery"

Έλεγχος υλικούΘα πρέπει να δείξει GPU σας χωρίς λάθη.

# 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:

.\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 περιλαμβάνει προγράμματα δειγμάτων.

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

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

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

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

Σύνδεσέ το.(απαιτεί Visual Studio):

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

Τρέξε το.

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

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

Βήμα 5: Δοκιμή από C#Program.cs:

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

    • DeviceIdONNX Runtime
    • είναι ο ευκολότερος τρόπος για να χρησιμοποιήσετε CUDA από C#.
  2. Γιατί αυτό το πακέτο;- Μόνο CPU

      • Περιλαμβάνει υποστήριξη CUDA
    • Κωδικός δοκιμής: Ανίχνευση GPU
  3. ΔημιουργίαΑνάλυση κωδικών

    • OrtCUDAProviderOptions
      • Ρύθμιση εκτέλεσης CUDA

- Ποια GPU να χρησιμοποιήσετε (0 για την πρώτη GPU)

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():

# 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

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

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).

# 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:

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 να αναπαριστά πολυδιάστατες συστοιχίες

Σχήμα

dotnet run

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

=== 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 λειτουργίες για σταθερά αποτελέσματα

Εκτέλεση δοκιμής απόδοσης

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

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Έχουμε αποδείξει ότι όλη η στοίβα δουλεύει:

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

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-δεθεί
  • Περίληψη

  • Έχουμε πετύχει:

  • και

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

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

Το

# 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

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

Μέρος 4: Κατασκευή του σωλήνα κατάποσηςΜέρος 5: Ο πελάτης των WindowsΜέρος 6: Τοπική ενσωμάτωση LLM

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.