Weboldal keresés

GPU Cseppekkel és Hálózattal történő Gradiens Méretezés


Bevezetés

Próbáltad már valaha mesterséges intelligenciával képeket generálni?

Ha van ilyened, akkor tudod, hogy egy jó kép kulcsa egy jó, részletes kérést jelent.
Én pedig rossz vagyok az ilyen részletes vizuális kérések megfogalmazásában, így a nagy nyelvi modellekre támaszkodom, hogy generálják a részletes kérést, és aztán ezt használom nagyszerű képek létrehozására. Íme néhány példa a kérdésekre és a képekre, amelyeket sikerült létrehoznom:

Kérlek: Készíts egy lenyűgöző madártávlati képet Bengaluru városáról, India, a város neve vastag, arany betűkkel a kép tetején, a város sziluettje és Nandi Hills látható a háttérben.

Kérlek, tervezd meg a híres Vidhana Soudha épület képét Bengaluru városában, Indiában, a városnév modern, sans-serif betűtípussal írva az image alján, elegáns és minimalista stílusban.

Kérlek: Generálj egy képet egy nyüzsgő utcai piacon Bengaluru-ban, Indiában, a város nevét játékos, ívelt betűtípussal a jelenet fölött, meleg és hívogató stílusban.

A kívánt eredmények elérése érdekében a Flux.1-schnell modellt használjuk a képgeneráláshoz, míg a Llamma 3.1 - 8B - Instruct modellt a Prompt generáláshoz. Mindkettő egy egyetlen H100 gépen található a MIG segítségével(erről később bővebben).

Ez a blog nem egy újabb képgenerálási útmutató. Célunk egy skálázható, biztonságos és globálisan elérhető (és megfizethető) mesterséges intelligencia architektúra létrehozása.

Képzelj el egy üzleti esetet, ahol egy globális e-kereskedelmi platformnak gyors képk customizációra van szüksége a felhasználók számára, vagy egy tartalomplatformnak, amely kontinentális igény szerint AI által generált szöveget szolgáltat.
Egy ilyen felállás számos kihívást jelent a fejlesztők számára. Példa:

  • A GPU-k ijesztőek és drágák.
  • A gradiens eszközök a legkorszerűbbek, és mindegyik eszköznek specifikus beállítási követelményei vannak.
  • A háttérszerverek biztonságos összekapcsolása a Gradient szerverekkel
  • Globálisan elosztott felhasználók irányítása a legközelebbi szerverhez stb.

Ez a bemutató legyen az alap, amiből kiindulhatsz, hogy megoldj minden problémát itt.

Előfeltételek

Mielőtt folytatná a bemutató hozzáadását, győződjön meg arról, hogy rendelkezik a következőkkel:

  • Egy DigitalOcean fiók.
  • Alapvető ismeretek a GPU-ról, a felhőhálózatról, a VPC-ről és a terheléselosztás fogalmairól.
  • Alap szintű ismeretek Bash, Docker és Python terén.
  • Megkapta a HuggingFace hozzáférést a Flux.1 modell képgenerálásához.
  • Hozzáférést biztosított a HuggingFace-nek a Llama 3.1-8b-Instruct modellhez
  • A vLLM egy gyors és könnyen használható könyvtár az LLM következtetésekhez és kiszolgáláshoz.

Gyakorlati útmutató

Magas szintű tervezés

Ennek lehetővé tétele érdekében egy elosztott architektúrát terveztünk a DigitalOcean infrastruktúrájával. Egy Globális Terheléselosztóval (GLB) kezdjük, amely kezeli a bejövő kéréseket, biztosítva, hogy a felhasználók bármely régióból minimális késleltetést tapasztaljanak.

Következő lépésként könnyűsúlyú képgeneráló alkalmazásokat telepítettünk kulcsfontosságú régiókban - Londonban, New Yorkban és Sydneyben - mindegyik saját gyorsítótárával, kész arra, hogy szükség esetén csatlakozzon a GPU erőforrásainkhoz. Végezetül mindezek az összetevők biztonságosan kommunikálnak a VPC Peeringen keresztül, összetett feladatokat irányítva vissza a torontói H100 GPU-nkhoz, ahol a prompt és a képgenerálás varázslata zajlik.

Komponensek

Könnyűsúlyú Kép Generáló Alkalmazás

A Kép-generáló alkalmazás egy egyszerű Python Flask alkalmazás három fő komponenssel:

  1. Helymeghatározás Szekció: Ez az összetevő egy hamis kérést küld a böngészőből a szervernek, hogy meghatározza a felhasználó helyét (város és ország) és azonosítsa, hogy melyik szerver régió kezeli a kérést. Ez az információ a felhasználónak van megjelenítve, és segít optimalizálni a prompt és képgenerálást, ahogy később részletesebben is magyarázni fogjuk.

  2. Promptok legördülő szakasz: Miután meghatározták a felhasználó helyét, az alkalmazás először ellenőrzi a gyorsítótárat, hogy vannak-e ott előre meglévő promptok, amelyek a helyhez kapcsolódnak. Ha a gyorsítótárban megfelelő promptot találnak, azokat azonnal megjelenítik egy legördülő menüben, lehetővé téve a felhasználó számára, hogy válasszon egy promptot a képgeneráláshoz. Ha a gyorsítótárban nincs elérhető prompt, az alkalmazás kérdést küld az LLM-nek (Nagy Nyelvi Modell), hogy új promptokat generáljon, amelyeket későbbi felhasználásra elmentenek, és a legördülő menüben felkínálnak a felhasználónak a választáshoz.

  3. Generált Kép Szakasz: Amikor a felhasználó kiválaszt egy kérést, az alkalmazás először ellenőrzi, hogy az adott kérésből generált kép már elérhető-e a lemezen. Ha van elmentett kép, akkor az közvetlenül a lemezről kerül betöltésre, garantálva ezzel a gyorsabb válaszidőt. Ha nem áll rendelkezésre elmentett kép, az alkalmazás API-hívást végez egy új kép generálására, amelyet későbbi kérésekhez elmentenek, és megjelenítik a felhasználónak.

MIG GPU komponens

A MIG (Multi-Instance GPU) az NVIDIA GPU-k, például az H100 egyik funkciója, amely lehetővé teszi, hogy egyetlen fizikai GPU-t több független példányra osszanak. Minden példányt MIG szeletnek neveznek, amely teljesen izolált GPU-ként működik a saját számítási, memória- és sávszélességi erőforrásaival.
Ez a megközelítés nemcsak a GPU kihasználtságának optimalizálását szolgálja, hanem lehetővé teszi, hogy az képgeneráló és a promptgeneráló modelleket párhuzamosan telepítsük.

Lépésről lépésre történő beállítás

GPU Droplet elindítása: Kezdje azzal, hogy létrehoz egy GPU Dropletet a DigitalOcean-on, egyetlen H100 GPU-val és a ML fejlesztéshez készült előre telepített operációs rendszer képpel.
MIG engedélyezése az H100 GPU-n: Miután a GPU Droplet működik, engedélyezze az MIG (Multi-Instance GPU) módot az H100-on. Az MIG lehetővé teszi, hogy a GPU-t több, kisebb GPU példányra osszák, amelyek mindegyike elszigetelt a többitől. Ez az elszigeteltség döntő fontosságú a különböző modellek párhuzamos futtatásához anélkül, hogy zavarják egymást.

sudo nvidia-smi -i 0 -mig 1

Válassza ki a MIG profilt és hozzon létre példányokat: MIG engedélyezésekor válassza ki azt a profilt, amely megfelel a futtatni tervezett modellek követelményeinek.

nvidia-smi mig -lgip # will list all the profiles

Például

sudo nvidia-smi mig -cgi 9,9 -C

Ez a parancs 2 MIG példányt hoz létre, 40 GB memóriát biztosító profillal, ami elegendőnek kell lennie mindkét modellhez. Az alábbi kód felsorolja az összes MIG példány azonosítót.

nvidia-smi -L

Docker konténerek beállítása minden MIG példányon: Minden MIG példányhoz futtassunk egy külön Docker konténert a megfelelő modellen. Ez a beállítás két Docker konténer letöltését és futtatását igényli a modellekhez: az egyik a képalkotásra (Flux.1-schnell), a másik pedig a prompt generálásra (Llama 3.1 via vLLM).
Flux.1-schnell telepítése képalkotáshoz: A metatonic képeket és kódot használtuk a Flux.1 Docker kép telepítéséhez.

Clone the repo
git clone https://github.com/matatonic/openedai-images-flux
cd openedai-images-flux

Copy Config file
cp config.default.json config/config.json

Run the docker image
sudo docker run -d \
 -e HUGGING_FACE_HUB_TOKEN="<HF_READ_TOKEN>" \
 --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=<MIG_INSANCE_ID> \
 -v ./config:/app/config \
 -v ./models:/app/models \
 -v ./lora:/app/lora \
 -v ./models/hf_home:/root/.cache/huggingface \
 -p 5005:5005 \
ghcr.io/matatonic/openedai-images-flux 

Telepítsd a Llama 3.1-et vLLM használatával a prompt generáláshoz: Töltsd le és futtasd a Docker konténert a prompt generáló modellhez vLLM használatával.

sudo docker run -d --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=<MIG_INSANCE_ID> \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e HUGGING_FACE_HUB_TOKEN="<HF_READ_TOKEN>" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model meta-llama/Meta-Llama-3.1-8B-Instruct

Model Hozzáférés és Kommunikáció:

  • Minden konténer hozzáférhető kijelölt portokon keresztül, lehetővé téve az image generation alkalmazás példányai számára, hogy csatlakozzanak és kéréseket küldjenek either az image model (Flux.1-schnell) vagy a prompt model (Llama 3.1) felé szükség szerint.
  • A MIG-particionálás biztosítja, hogy mindkét modell hatékonyan és párhuzamosan működjön, kihasználva a GPU erőforrásait anélkül, hogy zavarják egymást.

Regionális alkalmazás példányok

A Lightweight alkalmazásokat regionális helyszíneken (London, New York, Sydney) állítottuk be, hogy helyben kezeljék a felhasználói kéréseket, gyorsabb válaszok érdekében gyakran hozzáfért kéréseket és képeket gyorsítótárazva.

  • Először hozzon létre Cseppfolyósokat egy régióban a Cseppfolyósok szakaszán keresztül a DO irányítópultján.
  • SSH-be lépni és beállítani a kódot. A sebesség érdekében már létrehoztam egy konténert, így csak annyit kell biztosítanunk, hogy hozzáférésünk legyen a DO kontéregiszterhez és lehúzzuk a képet.
Login to docker registry
sudo docker login registry.linux-console.net

Pull the container
sudo docker pull registry.linux-console.net/<cr_name>/city-image-generator:v2
  • Ezen a ponton készítenék egy pillanatfelvételt a cseppfolyósításról, és elérhetővé tenném a többi régió számára, ahol tervezem az alkalmazás telepítését.
  • Térj vissza a csepphez és futtasd a konténert.
Run the Container
sudo docker run -d -p 80:80 registry.linux-console.net/<cr_name>/city-image-generator:v2
  • Most hozzon létre további cseppfolyósítószereket más régiókban a pillanatkép segítségével, és futtassa a konténert.

VPC Peering

A VPC Peering biztosítja a biztonságos, alacsony késleltetésű kommunikációt a regionális alkalmazáspéldányok és a torontói GPU szerver között egy privát hálózaton.

  1. Navigálj a Hálózat szakaszra a DigitalOcean irányítópultján.
  2. Látnod kell a default vpc-t minden régióban (pl. London, New York, Sydney és Toronto).
  3. Használja a VPC Peering funkciót a kapcsolatok létrehozásához a torontói VPC és a regionális VPC-k között.
  4. Ellenőrizze a kapcsolódást egyszerű hálózati eszközökkel, például ping vagy curl segítségével a regionális alkalmazás szerverektől a GPU szerverig.

Globális Terheléselosztó (GLB)

A GLB az incoming felhasználói kéréseket a legközelebbi regionális alkalmazás példányhoz osztja ki, optimalizálva a késleltetést és javítva a felhasználói élményt.

  1. A műszerfal hálózati részének Terheléselosztók szakaszában hozzon létre egy új Globális Terheléselosztót.
  2. Add meg a regionális alkalmazás példányokat backend célként.
  3. Állítsa be az egészségügyi ellenőrzéseket, időtúllépéseket és egyéb fejlett beállításokat.
  4. Hozzon létre Terheléselosztót

Mivel minden összetevő a helyén van, az architektúrád teljesen működőképes, lehetővé téve a skálázható és biztonságos Gradient szolgáltatásokat. A DigitalOcean felhasználói felület leegyszerűsíti a beállítások nagy részét, lehetővé téve számodra, hogy a mesterséges intelligencia modelleid teljesítményének és funkcionalitásának optimalizálására összpontosíts.

Következtetés

Ez a bemutató praktikus kiindulási pont a vállalkozások és fejlesztők számára, akik elosztott gradient megoldásokat, például személyre szabott tartalmat generáló e-kereskedelmi platformokat vagy globális közönséget kiszolgáló AI-alapú tartalmi platformokat vizsgálnak. A DigitalOcean termékeinek kihasználásával ez a beállítás bemutatja, hogyan lehet egyensúlyt teremteni a skálázhatóság, a biztonság és a költséghatékonyság között a legmodernebb AI szolgáltatások telepítése során.

Hivatkozások

Többet olvashat a bemutatóban használt technológiákról itt:

  • Nvidia Több Példányos GPU-k MIG
  • Mikor használjuk a MIG-et?
  • Flux.1 Modellek
  • Llama 3.1 Modellek