Back to ""Lakimies GPT:n" rakentaminen blogiisi - Osa 2: GPU:n asetus ja CUDA C#"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI AI-Article C# CUDA GPU LLM mostlylucid.blogllm

"Lakimies GPT:n" rakentaminen blogiisi - Osa 2: GPU:n asetus ja CUDA C#

Wednesday, 12 November 2025

VAROITUS: NÄYTTELEVÄT NÄYTTEET, JOITA EI OLE KÄYTETTY.

Se on todennäköisesti suuri osa siitä, mikä alla on, ei toimi. Minä luon nämä minulle ja sitten teen kaikki askeleet ja saat näytesovelluksen toimimaan...Olet ollut ovela ja nähnyt ne! ne ovat todennäköisesti valmiita joulukuun puolivälissä.

## Johdanto

Tervetuloa toiseen osaanSisäänOsa 1

Laadimme vision kirjoittavan avustajan rakentamisesta, joka käyttää blogiasi tietopohjana - kuten se, miten asianajajat käyttävät oikeuskäytännössä koulutettuja LLM-asiantuntijoita asiakirjojen laatimiseen.

**Nyt on aika liata kädet perustuksella: varmista, että GPU on valmis tekoälyyn.**HUOMAUTUS: Tämä on osa kokeilujani tekoälyllä (avustettu suunnittelu) + omalla muokkauksellani.

Sama ääni, sama pragmatismi, vain nopeammat sormet.Rautakaupastani: Käytän NVIDIA RTX A4000 (16GB VRAM), AMD Ryzen 9 9950X ja 96GB DDR5 RAM -muistia.Mutta et tarvitse tätä!Kuten osassa 1 mainitaan, voit käyttää mitä tahansa NVIDIA GPU:ta, jossa on 8GB+ VRAM, tai käyttää jopa vain prosessoria (hitaampi mutta toimiva).

Tässä osassa keskitytään GPU-asetukseen, mutta huomioin CPU-vaihtoehdot tarpeen mukaan.

Tämä osa voi vaikuttaa perusasialta, jos olet jo perehtynyt

CUDA

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

, mutta luota minuun - Olen tuhlannut lukemattomia tunteja salamyhkäisten virheiden vianetsintään, joka juontaa juurensa versioiden eroavuuksiin, puuttuviin ympäristömuuttujiin tai virheellisiin:

  1. cuDNNInstallaatiot.
  2. **Teemme tämän alusta alkaen.**Miksi GPU:n kiihtyvyys on tärkeää
  3. **Ennen kuin sukellamme asennukseen, on ymmärrettävä, miksi GPU-kiihdytystä ylipäätään tarvitaan.**Suoritin vs GPU tekoälyn työlatauksille
  4. Miksi GPU:t hallitsevat tekoälyäRinnakkaisuus

- GPU:ssa on tuhansia hylsyjä ja prosessorien kymmeniäMatrix-toiminnot

  • - tekoäly on enimmäkseen matriisimatematiikkaa, jossa GPU:t ovat loistaviaMemory Bandth

  • - GPU:t siirtävät dataa paljon nopeamminErikoistuneet laitteistot

  • Tensoriytimet nopeuttavat tekoälykohtaisia toimintoja

Oikean maailman esimerkki(laitteistoni päällä): Luomme upotuksia blogikirjoitukseen:

  • CPU (Ryzen 9 9950X): ~5 sekuntia per virka
  • GPU (A4000 16GB): ~0,3 sekuntia per virka
  • **Se on 16x nopeammin, ja se yhdistelee satojen viestien käsittelyä!**Suorituskyky muilla GPU:illa
  • (lähes:)

RTkansainvälinen yhteistyö (0811)RTkansainvälinen yhteistyö (0811)

(24GB): Nopein, ~0,2s per virka

RTmaaseutualue (4031)RTmaaseutualue (4031)

(12GB): ~0,5s per virka

  • GTX 1070 Ti(8GB): ~0,8s per virka
  • **Vielä paljon nopeampi kuin prosessori!**Laitteiston ymmärtäminen
  • **Ennen kuin asennamme mitään, ymmärretään, mitä teemme.**Oma GPU: NVIDIA RTX A4000
  • **Tämä on erityinen GPU - ammatillinen työpistekortti, jossa on:**16GB GDDR6-VRAM

- Tarpeeksi 7B-13B-parametrimalleille

6144 CUDA-ydintä

  • Rinnakkaiskäsittelyteho |-----|------|----------------|----------| 256 Tensoriytimet
  • Nopeutettu tekoälytoiminta CUDA Compute Capability 8,6
  • Yhteensopivuuden kannalta tärkeää Yhteiset GPU-asetukset Seuraavassa on, mitä eri GPU:t voivat käsitellä:

GPU VRAM Max mallikoko Hyvä juttu

RTX 4090 24GB 13B-30B Overkill tähän hankkeeseenRTX 4070 Ti 12GB 7B-13B Erinomainen valinta

RTTX 3060, 12GB, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 6B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7B, 7BRTX 4060 Ti 16GB 7B-13B Suuri arvo

A4000 (miina) 16GB 7B-13B GPU-työasema:

  • GTX 1070 Ti 8GB 7BEntä Intel/AMD NPU:t?
  • **Olet ehkä kuullut Intel Core Ultra- tai AMD Ryzen AI-siruista, joissa on sisäänrakennettu NPU (Neural Processing Units).**Voitko käyttää niitä NVIDIA:n sijaan?
  • Lyhyt vastausEi vielä, mutta ehkä 2024-2025!
  • Nykyiset rajoituksetEi CUDAa

: NPU:t eivät tue CUDAa, jota tämä opetusohjelma käyttää:

  • Rajoitettu NET-tuki
  • : ONNX Runtimen NPU-tuki on kokeellistaMallin yhteensopivuus: Useimmat GGUF-mallit kohdistuvat CUDA/CPU:han
  • SuoraML-tuki

: Yhä kypsymässä LLM:illeJos sinulla on NPU-avustinKäytä nyt vain CPU-tilaa (kaikki toimii, vain hitaammin)

Vartioi

ONNX-runtime DirectML

# PowerShell
wmic path win32_VideoController get name

päivitykset

Name
NVIDIA RTX A4000

Tulevaisuuden osat huomaavat, kun NPU:n tuki paranee

Tässä sarjassa keskitytään

NVIDIA CUDA

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

Koska se on kypsä ja hyvin tuettu .NETissä, mutta konseptit käännetään NPU:ille, kun ekosysteemi saavuttaa!:

  • Tarkista GPU:siVarmista ensin, että Windows näkee GPU:n:
  • **Näkisitpä esimerkiksi:**Tai käytä NVIDIA-ohjauspaneelia → Järjestelmätiedot → Näytä välilehti.
  • Arkkitehtuurin yleiskatsausNäin ohjelmistopino toimii:
  • Tason erittelyNVIDIA Driver
  • - Matalatasoinen GPU-viestintäCUDA-työkalupakki

- API-rajapinnat GPU-ohjelmointiin

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 -kirjasto (optimoidut ytimet)

ONNX Runtime / STAMASharp

  • Korkean tason ML-kehykset
nvidia-smi

Sovelluksesi

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

- Meidän C#-koodimme:

  • Driver VersionAsentamista koskeva etenemissuunnitelma
  • CUDA VersionAsennamme tämän tilauksen (tilausasiat!):
  • Memory-UsageVaihe 1: NVIDIA Driver

Tarkista nykyinen ohjain

Avoin PowerShell:nvidia-smiNäkisitpä ulostulon kuten:

  1. Avaintiedot: Pitäisi olla 545.xx tai uudempi

  2. : Tämä on MAX CUDA -versio tuettuna, ei asennettuna

    • : Tällä hetkellä käytetty / yhteensä VRAMPäivitä ajuri, jos sitä tarvitaan
    • Josei toimi tai kuljettajasi on vanha:
    • SiirryNVIDIA -ajurien lataukset
    • Valitse:**Tuotetyyppi:**RTX/Quadro
    • Tuotesarja:RTX Axxxx-sarjaTuote:
  3. RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBenchmark (0821) RTBench (0821) RTBench (0821) RTBench (0821)

  4. Käyttöjärjestelmä:nvidia-smi

Ikkunat 11

(tai sinun versiosi)

Lataa tyyppi:

Studio Driver(vakaampi kuin Game Ready)Asenna ja käynnistä uudelleenVarmista uudelleen

  • Vaihe 2: CUDA ToolkitCUDA tarjoaa ohjelmarajapinnan GPU-kiihtyvyydelle.
  • Mallin valintaKriittinen
  • : TarvitsemmeCUDA

12.x nykymalleille.

  1. Erityisesti:CUDA 12,1+
    • Hyvä tasapaino yhteensopivuuden ja ominaisuuksien välillä (kirjoitushetkellä)Viimeisin 12.x- Tarkista yhteensopivuus kirjastojen kanssa
  2. EI KUUDA 11.x- Puuttuvat ominaisuudet uudemmille malleille
  3. Lataa & asenna

Siirry

CUDA Toolkit Archive

Installation Type: Custom (Advanced)

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

ValitseCUDA Toolkit 12.1

(tai 12.3 jos olet seikkailunhaluinen)

Valitse:

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

Windows → x86_64 → 11 → exe (paikallinen)

Lataa (~3GB)

Asennusasetukset

Suorita asentaja.:

$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

Kun kehotus on annettu::

  1. Miksi custom?: Emme halua heikentää ajuriamme tai asentaa peliohjelmia.:

    • AsennuspolkuThis PCOletuspolku on hyvä:
  2. Mutta huomaa tämä - tarvitsemme sitä ympäristömuuttujia varten!Aseta ympäristömuuttujatAsentaja yleensä asettaa nämä, mutta varmistaa:

    • 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. Tarkista PowerShellPathJos puuttuu, lisää manuaalisesti

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp
    
  4. AvaaYmpäristömuuttujat

Klikkaa hiiren kakkospainikkeella

# 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

→ Ominaisuudet → Advanced System Settings → Ympäristömuuttujat

Alle

Järjestelmämuuttujat

, tarkista/lisää:: Sisäänmuuttuja, varmista, että nämä ovat olemassa:

Käynnistä pääte uudelleenJotta muutokset tulisivat voimaanVarmista CUDA-asennus**Vaihe 3: cuDNN (CUDA Deep Neural Network -kirjasto)**cuDNN tarjoaa optimoituja toteutuksia syväoppimiseen.

Mallin yhteensopivuus

  1. KriittinencuDNN
  2. version täytyy vastata CUDA-versiota!
  3. FINREP:n puolestaCUDA 12.x
  4. , tarvitsemmecuDNN 8,9+
  5. CUDA 12.x (kirjoitushetkellä 8.9.7 tai sitä myöhemmin)

Lataa cuDNN

Siirry

cuDNN-arkistoTarvitset NVIDIA-kehittäjän tilin (ilmainen)

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)

Etsi::

# 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\"

Lataa cuDNN v8.9.7 (5. joulukuuta 2023), CUDA 12.x:

  1. Valitse:bin\Paikallinen asennin Windowsille (Zip)C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\
  2. Lataa (~800MB)include\Ote ja asenna cuDNNC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include\
  3. cuDNN on vain joukko tiedostoja, joita kopioit CUDA-installaatioosi.lib\x64\Poista ZIPC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64\

, näet:

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

Kopioi tiedostot CUDA-asennukseen

Tai tee se käsin

Kopioi kaikki tiedostot

nvidia-smi

Kohtiin

Kopioi kaikki tiedostot

nvcc --version

Kohtiin

Kopioi kaikki tiedostot

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

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

Kohtiin

Varmista cuDNN-asennus

Vaihe 4: Täydellinen varmennus:

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

Varmistetaan, että kaikki toimii yhdessä.:

cd "1_Utilities\deviceQuery"

Laitteiston tarkistusPitäisi näyttää GPU ilman virheitä.

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

.\x64\Release\deviceQuery.exe

Näytä CUDA 12.1 (tai mitä tahansa versiota olet asentanut).

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

Järjestelmämuuttujat tarkastetaan: Result = PASS

CUDA-näytteiden testi (valinnainen, mutta suositeltava)

CUDA Toolkit sisältää näyteohjelmia.

Kokoonnutaan ja juostaan yksi.

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

Etsi laiteQuery

Koosta se(vaatii Visual Studiota):

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

Suorita se

  • Microsoft.ML.OnnxRuntimeNäkisitpä ulostulon kuten:
  • Microsoft.ML.OnnxRuntime.GpuAvainrivi

Jos näet tämän, GPU + CUDA + cuDNN-pino toimii!

Vaihe 5: C#:n testausProgram.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 ===");
        }
    }
}

Nyt hauska osa - käytetään itse asiassa C#:n CUDAa!:

  1. Luo testiprojektiLisää ONNX-käyttöaika CUDA:n kanssa

    • DeviceIdONNX-ajoaika
    • on helpoin tapa käyttää C#:n CUDAa.
  2. Miksi tämä paketti?- Vain prosessori

      • Sisältää CUDA-tuen
    • Testikoodi: GPU-detektio
  3. LuoKoodin jaottelu

    • OrtCUDAProviderVaihtoehdot
      • Määrittää CUDA- suorituksen

- Mitä GPU:ta käytetään (0 ensimmäiselle GPU:lle)

dotnet run

Voi asettaa muistin rajat, optimointitason jne.:

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

SessionValinnat.LisäysExecutionProvider_CUDA()

- kertoo ONNX Runtimesta GPU:n käyttöön

Jos tämä onnistuu, CUDA toimiiJos se epäonnistuu, jokin pinossa on rikki

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

- Listaa kaikki saatavilla olevat toteuttajan

**Jos kaikki on asennettu oikein, mukana on oltava "CUDA ExecutionProvider"**Näyttää myös "CPUExecutionProvider" vararenkaana

Suorita testi:

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

Odotettu tuotos

Tavallisten virheiden vianetsintäVirhe: "DllNotFoundException: Ei voitu ladata DLL "onnxruntime"

Syy: ONNX Runtime ei löydä CUDA DLLs.

Korjaa

Virhe: "CUDA ExecutionProvideria ei löytynyt"

Syy

: Käytetään väärää ONNX-runtime-pakettia (vain CPU).

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

Korjaa

Virhe: "CUDA-virhekoodi: 35 (CUDA-ajurin versio on riittämätön)"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;
        }
    }
}

Syy:

  1. **Kuljettaja on liian vanha CUDA 12.x:lle.**Korjaa

    • : Päivitä NVIDIA-ajuri 545.xx:ään tai uudempaan.[1, 1, 28, 28]Advanced Test: Todellinen päätelmä
  2. **Tehdään jotain todellista - tehdään pieni hermoverkko GPU:n ja CPU:n välillä ja vertaillaan nopeuksia.**Lataa testimalli

    • Käytämme yksinkertaista MNIST-numerotunnistusmallia (ONNX-muoto).
  3. Päättymistestien koodiPäivitä

    • Koodin selitys
  4. Densetensori- ONNX Runtime edustaa moniulotteisia sarjoja

Muotoile

dotnet run

= erä_koko=1, kanavat=1, korkeus=28, leveys=28NimettyOnnxValue

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

- Liittää tensorin syötenimeen

  • "Input3" on MNIST-mallin sisääntulonimi
  • Lämpeneminen
    • Ensimmäinen päätelmä on aina hitaampi (mallilataus, optimointi)

Juoksimme kerran ennen ajoitusta saadaksemme tarkat mittaukset

Ajoitusmenetelmä ✅ Driver installed correctly ✅ CUDA Toolkit accessible ✅ cuDNN integrated ✅ ONNX Runtime finds CUDA ✅ C# can run GPU-accelerated inference

- Vakaat tulokset keskimäärin yli 100 iterointia

Suorita suorituskykytesti

Odotettu tuotos

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

(numerosi vaihtelevat)::

  1. **Miksi näin pieni kiihdytys?**MNIST on pikkuruinen (vain 100KB-malli)
  2. GPU-tiedonsiirron yleiskuva hallitseeSuuremmille malleille (1GB+) näet 10-100x pikalyönnit
  3. Key TakeawayOlemme todistaneet koko pinon toimivan:

Suorituskyvyn ymmärtäminen

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

Muistinsiirtojen pullonkaula:

  • **Päättelyn aikana tapahtuu näin:**Suoritusoppitunti
  • Erän käsittely- Siirrä monet syötteet kerralla poistoon

Säilytä tiedot GPU:sta

  • - Ketjuoperaatiot siirtojen välttämiseksiSuuremmat mallit hyötyvät enemmän
  • - Kiinteät siirtokustannukset, skaalauslaskelmaMilloin käytetään GPU:ta vs. prosessoria
  • NyrkkisääntöGPU

- Suuret mallit, eräkäsittely, upotussukupolvi

Suoritin

  1. ✅ Installed NVIDIA driver (545.xx+)
  2. ✅ Installed CUDA Toolkit 12.1
  3. ✅ Integrated cuDNN 8.9.7
  4. ✅ Verified with nvidia-smi- Pienet mallit, yksittäiset pyynnöt, latenssikriittisyysnvcc
  5. ✅ Tested GPU access from C# with ONNX Runtime
  6. ✅ Ran performance comparison (GPU vs CPU)

Blogin kirjoittamisen assistentti:

Liitännät

  • Eräprosessi 100+ kappaletta → GPULLM-päätelmä- Iso malli (7B paramit) → GPU

  • Vektorihaku

    • Riippuu DB-valinnasta, usein suorittimena
  • Yhteenveto

  • Onnistuimme:

  • sekä

Kehitysympäristömme on nyt valmis tekoälyyn!

Mitä seuraavaksi?

Sisään

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

Sukellamme syvälle upotus- ja vektoritietokantoihin: |-------|-------|-----| | nvidia-smiMitkä ovat upotukset ja miten ne mahdollistavat semanttisen etsinnän? | nvccQdrantin, pgvectorin ja muiden vaihtoehtojen valinta Luodaan upotuksia paikallisesti ONNX-runtimella Miljoonia vektoreita varastoidaan ja tiedustellaan tehokkaastiMicrosoft.ML.OnnxRuntime.Gpu | Ensimmäisen semanttisen hakuprototyypin rakentaminen

Aloitamme vihdoin varsinaisen blogisisällön parissa ja näemme RAG:n toiminnassa!

Vianmääritysreferenssi |--------------|---------------|--------------|-----------------| Nopeat diagnostiset komennot Yhteiset kysymykset Erehdys Syy Korjata

ei löytynyt ajuria ei ole asennettu ajuria Asenna NVIDIA

Sarjanavigointi

Osa 4: Ruoansulatusputken rakentaminenOsa 5: Windows-asiakasOsa 6: Paikallinen LLM-integraatio

logo

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