A Global Performance Tuner olyan automatikus, pontosság-tudatos és end-to-end teljesítményhangoló funkció, amelyet az NVIDIA bevezetett a TensorRT 11.1 kiadásban. Célja, hogy a TensorRT építési folyamatában explicit, kereshető "build route"-ok (építési útvonalak) formájában reprezentálja a különböző ütemezési (scheduling) alternatívákat, és a tényleges mérés alapján válassza ki a telepítési környezethez leggyorsabb, ugyanakkor a megadott pontossági követelményeket teljesítő megoldást.
A felépítés alapelvei: knobok és build route-ok
A tervezési alapötlet az, hogy a fordító (compiler) konfigurációs beállításait — amelyek megváltoztatnak egy-egy pass viselkedését, heurisztikát, fúziós döntést vagy kódgenerálási útvonalat — kezeljük kereshető választási pontokként (knobok). Minden tunolható knob véges értékkészlettel rendelkezik és rendelkezik alapértelmezett értékkel. Egy build route egy konkrét knob-értékekből álló kombináció, azaz egy adott útvonal az építési térben.
Például egy egyszerű fordító három passszal (f1, f2, f3) és egy bináris knobbal p esetén p=1 horizontális fúziót, p=0 vertikális fúziót eredményezhet. Ezek két külön build route-ot adnak, és a modellhez két jelölt motort kell felépíteni és valós környezetben összehasonlítani, mert nincs olyan ütemezés, amely minden modell és alakzat esetén univerzálisan jobb.
Fontos megjegyezni, hogy a knob-kombináció build-route specifikáció: nem írja le teljesen a végső motort. A TensorRT a további építési lépéseket — például taktika kiválasztást — továbbra is elvégzi, és egyes knob-értékeket a hálózati korlátokhoz igazíthat.
API-k és trtexec implementáció
TensorRT két alapvető képesség köré épít egyszerű API-felületet: egy build route alkalmazása/lekérdezése és a tunolható konfigurációs tér felfedezése. A releváns C++ API-k:
- bool IBuilderConfig::setBuildRoute(char const* buildRoute);
- char const* IBuilderConfig::getBuildRoute() const;
- char const* IBuilderConfig::getAllBuildRoutes() const;
Ezekkel egyéni tuner is építhető; az NVIDIA által mellékelt minta megvalósítás a trtexec eszközben található.
A trtexec szervezése röviden:
- A felhasználó megad egy bemeneti modellt és egy regulárisszerű build-route kifejezést.
- A trtexec kiterjeszti a kifejezést konkrét build route-ok listájára a kereső algoritmus szerint.
- Egy ciklusban végigmegy a fix route-okon: minden iterációban felépíti a modellt az adott route-tal, majd mér pontosságot és teljesítményt.
- Azok a route-ok, amelyek összeomlanak vagy pontosságban megbuknak, kizárásra kerülnek; a leggyorsabb mérésű, elfogadott motor kerül kiválasztásra.
Mekkora a keresési tér és milyen eredmények érhetők el
A TensorRT 11.1 több mint 200 knobbal szolgál a hangoláshoz. A build-route optikai keresésekor a kombinációk száma gyorsan nőhet, ezért a tunereknek hatékony keresési stratégiára van szükségük. A dokumentáció részletezi a knobokat és szerepüket; a Python-oldali implementáció érkezik a Torch-TensorRT 2.15 csomagban.
Gyakorlati eredmények: tíz vizsgált munkaterhelés esetén a Global Performance Tuner által megtalált legjobb eligible route a default build route-hoz képest 1.14×–1.63× teljesítményjavulást eredményezett (a default útvonalhoz normalizálva 1.0x).
A különböző modellek és bemeneti alakzatok különböző optimalizációs lehetőségeket mutatnak, ezért egyetlen alapértelmezett ütemezési stratégia nem ad optimális eredményt minden esetben. A Global Performance Tuner alternatív útvonalakat vizsgál, kizárja a pontossági követelményt nem teljesítő jelölteket, és a mérés alapján választ.
Pontosság és teljesítmény összefonódása — gondolatkísérlet
A tuner pontosság-érzékeny; a rendszerben definiálható egy ε pontosság-tolerancia. Egy egyszerű példában négy bináris knob négy helyen engedheti meg a kvantálás (Q/DQ) beillesztését, ami elméletben 2^4 = 16 lehetséges megoldást ad. A teljesen kvantált megoldás adhatja a legjobb teljesítményt, de nem feltétlenül a szükséges pontosságot; a semilyen kvantálást nem alkalmazó verzió adja a legjobb pontosságot, de legrosszabb teljesítményt.
Az ε hatása három szélső esetben szemléltethető:
- ε = 0: szigorú, bit-pontos egyezés követelménye esetén csak azok a megoldások maradnak elfogadottak, amelyek teljesen megegyeznek a referencia kimenettel.
- ε = +∞: nincs hatékony pontossági korlát, minden jelölt elfogadott lehet, és előfordulhatna, hogy egy teljesen értelmetlen, de gyors megoldás válik optimumnak, ha csak a teljesítményt nézzük.
- ε fokozatos csökkenése: az elfogadott jelöltek halmaza zsugorodik, és minden ε értéknél a tuner a mérés alapján a leggyorsabb elfogadott megoldást választja.
A Global Performance Tuner tehát nem szünteti meg az alapvető trade-offot, hanem világosan szétválasztja a pontosság szerepét (mely jelöltek elfogadhatók) és a teljesítmény szerepét (az elfogadható jelöltek rangsorolása).
Ajánlott eljárások a hatékony hangoláshoz
A build-route feltérképezését érdemes átgondolt stratégiával végezni, mert a kombinatorikus tér gyorsan nő.
- Válassza a keresési stratégiát a keresési tér mérete szerint: a fast mód a gyors kezdeti szkennelést végzi (alapértelmezett útvonal + egy knob megváltoztatása egyszerre), a mixed mód először a fast lépést hajtja végre, majd a javulást mutató knob-k kombinációit vizsgálja, a full mód a teljes Descartes-szorzatot értékeli, ezért csak kis, gondosan kiválasztott knob-csoportoknál ajánlott.
- A --dryRun opcióval (fast vagy full esetén) a konkrét route-lista felépítése megtekinthető a motorok felépítése nélkül, így gyorsan ellenőrizhető a keresési tér. A mixed keresésnél a --dryRun nem támogatott, mert a második fázis a mért eredményekre támaszkodik.
- Használja a --tuningCacheFile opciót a folyamat mentéséhez: minden befejezett iteráció rögzítésre kerül build route-tal, GPU-idővel és pontossági eredménnyel; a --continue opcióval megszakítás után folytatható a hangolás.
- Hibakereséshez a --saveAllEngines lehetőség megőrzi minden iteráció motorját, de ez nagy tárolóigénnyel jár, ezért elsősorban hibakeresési célra ajánlott.
- Szabja a hangolási munkafolyamatot az alkalmazásra: a bemeneteknek és referencia kimeneteknek reprezentálniuk kell a tényleges telepítési feltételeket, beleértve határértékes eseteket és az alkalmazásnak megfelelő pontossági metrikát.
- Kezelje a korábbi eredményeket útmutatásként, ne univerzális megoldásként: egy adott modellre és környezetre jónak bizonyuló route nem feltétlenül lesz jó más környezetekben; érdemes újrahúzni (re-tune) hardver-, driver- vagy TensorRT-verzió váltás után.
Hogyan kezdjen hozzá
A Global Performance Tuner átalakítja a TensorRT teljesítmény-optimalizálását: ahelyett, hogy egyetlen univerzális ütemezést próbálna alkalmazni, modellekenként megvizsgál alternatív útvonalakat, és a pontossági korlátok figyelembevételével méri a végső end-to-end teljesítményt. A TensorRT jó kiindulási receptet ad, a knobok ellenőrzött variációkat biztosítanak, és a tuning megtalálja az adott környezetnek és alkalmazásnak legmegfelelőbb variánst.
Kezdéshez olvassa a Global Performance Tuner dokumentációját és nézze meg a nyílt forrású trtexec implementációt. Kiterjesztheti a mintát egyéni pontosság-ellenőrzésekkel, keresési stratégiákkal vagy heuristikákkal, vagy építhet egyedi tunert a TensorRT build-route API-k segítségével, hogy a vizsgálat és validáció teljes mértékben az alkalmazás követelményeihez igazodjon.



