ຄຳຕອບສັ້ນໆ: ໃຊ້ GPU NVIDIA ສຳລັບການຝຶກອົບຮົມ AI ໂດຍການຢືນຢັນວ່າໄດຣເວີ ແລະ GPU ສາມາດເບິ່ງເຫັນໄດ້ດ້ວຍ nvidia-smi , ຈາກນັ້ນຕິດຕັ້ງ framework/CUDA stack ທີ່ເຂົ້າກັນໄດ້ ແລະ ດຳເນີນການທົດສອບ “model + batch on cuda” ຂະໜາດນ້ອຍ. ຖ້າທ່ານໃຊ້ໜ່ວຍຄວາມຈຳໝົດ, ໃຫ້ຫຼຸດຂະໜາດ batch ແລະ ໃຊ້ຄວາມແມ່ນຍຳປະສົມ, ໃນຂະນະທີ່ຕິດຕາມການນຳໃຊ້, ໜ່ວຍຄວາມຈຳ ແລະ ອຸນຫະພູມ.
ບົດຮຽນຫຼັກ:
ການກວດສອບພື້ນຖານ : ເລີ່ມຕົ້ນດ້ວຍ nvidia-smi ; ແກ້ໄຂການເບິ່ງເຫັນໄດຣເວີກ່ອນທີ່ທ່ານຈະຕິດຕັ້ງເຟຣມເວີກ.
ຄວາມເຂົ້າກັນໄດ້ຂອງ Stack : ຮັກສາໄດຣເວີ, ຣັນໄທມ໌ CUDA, ແລະ ເວີຊັນເຟຣມເວີກໃຫ້ສອດຄ່ອງກັນເພື່ອປ້ອງກັນການຂັດຂ້ອງ ແລະ ການຕິດຕັ້ງທີ່ບໍ່ສະດວກ.
ຄວາມສຳເລັດເລັກນ້ອຍ : ຢືນຢັນການສົ່ງຕໍ່ຄັ້ງດຽວທີ່ເຮັດວຽກຢູ່ໃນ CUDA ກ່ອນທີ່ທ່ານຈະຂະຫຍາຍການທົດລອງ.
ລະບຽບວິໄນ VRAM : ອີງໃສ່ຄວາມແມ່ນຍໍາແບບປະສົມ, ການສະສົມ gradient, ແລະ checkpointing ເພື່ອໃຫ້ເໝາະສົມກັບຮູບແບບຂະໜາດໃຫຍ່.
ນິໄສການຕິດຕາມກວດກາ : ຕິດຕາມການນຳໃຊ້, ຮູບແບບຄວາມຈຳ, ພະລັງງານ ແລະ ອຸນຫະພູມ ເພື່ອໃຫ້ທ່ານສັງເກດເຫັນບັນຫາທີ່ຕິດຂັດໄດ້ແຕ່ຫົວທີ.

ບົດຄວາມທີ່ທ່ານອາດຈະຢາກອ່ານຫຼັງຈາກບົດຄວາມນີ້:
🔗 ວິທີການສ້າງຕົວແທນ AI
ອອກແບບຂັ້ນຕອນການເຮັດວຽກ, ເຄື່ອງມື, ໜ່ວຍຄວາມຈຳ ແລະ ລະບົບປ້ອງກັນຄວາມປອດໄພຂອງຕົວແທນຂອງທ່ານ.
🔗 ວິທີການນຳໃຊ້ຮູບແບບ AI
ຕັ້ງຄ່າສະພາບແວດລ້ອມ, ຮູບແບບການຫຸ້ມຫໍ່, ແລະຈັດສົ່ງໄປສູ່ການຜະລິດຢ່າງໜ້າເຊື່ອຖື.
🔗 ວິທີການວັດແທກປະສິດທິພາບ AI
ເລືອກຕົວຊີ້ວັດ, ດຳເນີນການປະເມີນຜົນ ແລະ ຕິດຕາມປະສິດທິພາບຕາມການເວລາ.
🔗 ວິທີການອັດຕະໂນມັດວຽກງານດ້ວຍ AI
ເຮັດໃຫ້ວຽກງານທີ່ຊ້ຳໆເປັນອັດຕະໂນມັດດ້ວຍການກະຕຸ້ນເຕືອນ, ຂັ້ນຕອນການເຮັດວຽກ ແລະ ການເຊື່ອມໂຍງ.
1) ພາບລວມ - ສິ່ງທີ່ເຈົ້າກຳລັງເຮັດເມື່ອເຈົ້າ “ຝຶກຊ້ອມກ່ຽວກັບ GPU” 🧠⚡
ເມື່ອທ່ານຝຶກອົບຮົມຮູບແບບ AI, ສ່ວນຫຼາຍແລ້ວທ່ານກຳລັງເຮັດການຄິດໄລ່ matrix ຢ່າງຫຼວງຫຼາຍ. GPU ຖືກສ້າງຂຶ້ນສຳລັບການເຮັດວຽກແບບຂະໜານນັ້ນ, ສະນັ້ນ frameworks ເຊັ່ນ PyTorch, TensorFlow, ແລະ JAX ສາມາດໂອນພາລະໜັກໃຫ້ກັບ GPU ໄດ້. ( ເອກະສານ PyTorch CUDA , ການຕິດຕັ້ງ TensorFlow (pip) , JAX Quickstart )
ໃນທາງປະຕິບັດ, “ການໃຊ້ NVIDIA GPUs ສຳລັບການຝຶກອົບຮົມ” ໂດຍປົກກະຕິແລ້ວໝາຍເຖິງ:
-
ພາລາມິເຕີຂອງຮູບແບບຂອງທ່ານອາໄສຢູ່ (ສ່ວນຫຼາຍແມ່ນ) ໃນ GPU VRAM
-
ກຸ່ມຂອງທ່ານຈະຖືກຍ້າຍຈາກ RAM ໄປຫາ VRAM ໃນແຕ່ລະບາດກ້າວ
-
ການ Forward pass ແລະ backprop ຂອງທ່ານເຮັດວຽກຢູ່ໃນ kernel CUDA ( ຄູ່ມືການຂຽນໂປຣແກຣມ CUDA )
-
ການອັບເດດເຄື່ອງມືເພີ່ມປະສິດທິພາບຂອງທ່ານເກີດຂຶ້ນໃນ GPU (ໂດຍຫລັກການແລ້ວ)
-
ເຈົ້າຕິດຕາມກວດກາອຸນຫະພູມ, ໜ່ວຍຄວາມຈຳ, ການນຳໃຊ້ ດັ່ງນັ້ນເຈົ້າຈຶ່ງບໍ່ແຕ່ງກິນຫຍັງເລີຍ 🔥 ( ເອກະສານ NVIDIA nvidia-smi )
ຖ້າສິ່ງນັ້ນຟັງຄືວ່າຫຼາຍ, ຢ່າກັງວົນ. ສ່ວນຫຼາຍແມ່ນລາຍການກວດສອບ ແລະ ນິໄສບາງຢ່າງທີ່ເຈົ້າສ້າງຂຶ້ນໃນໄລຍະເວລາ.
2) ສິ່ງທີ່ເຮັດໃຫ້ການຕັ້ງຄ່າການຝຶກອົບຮົມ AI NVIDIA GPU ລຸ້ນດີ 🤌
ນີ້ແມ່ນພາກສ່ວນ “ຢ່າສ້າງເຮືອນໃສ່ວຸ້ນ”. ການຕັ້ງຄ່າທີ່ດີສຳລັບ ວິທີການໃຊ້ GPU NVIDIA ສຳລັບການຝຶກອົບຮົມ AI ແມ່ນການຕັ້ງຄ່າທີ່ມີຄວາມໂດດເດັ່ນຕ່ຳ. ມີຄວາມໂດດເດັ່ນຕ່ຳແມ່ນໝັ້ນຄົງ. ໝັ້ນຄົງແມ່ນໄວ. ໄວແມ່ນ…ດີ, ໄວ 😄
ການຕັ້ງຄ່າການຝຶກອົບຮົມທີ່ແຂງແກ່ນມັກຈະມີ:
-
VRAM ພຽງພໍ ສຳລັບຂະໜາດ batch + model + ສະຖານະ optimizer ຂອງທ່ານ
-
VRAM ແມ່ນຄືກັບພື້ນທີ່ກະເປົ໋າເດີນທາງ. ເຈົ້າສາມາດຫຸ້ມຫໍ່ໄດ້ຢ່າງສະຫຼາດກວ່າ, ແຕ່ເຈົ້າບໍ່ສາມາດຫຸ້ມຫໍ່ໄດ້ຢ່າງບໍ່ມີຂອບເຂດ.
-
-
ຊຸດຊອບແວທີ່ກົງກັນ (ໄດຣເວີ + CUDA runtime + ຄວາມເຂົ້າກັນໄດ້ຂອງເຟຣມເວີກ) ( PyTorch Get Started (ຕົວເລືອກ CUDA) , ການຕິດຕັ້ງ TensorFlow (pip) )
-
ການເກັບຮັກສາໄວ (NVMe ຊ່ວຍໄດ້ຫຼາຍສຳລັບຊຸດຂໍ້ມູນຂະໜາດໃຫຍ່)
-
CPU + RAM ທີ່ເໝາະສົມ ດັ່ງນັ້ນການໂຫຼດຂໍ້ມູນຈະບໍ່ເຮັດໃຫ້ GPU ຂາດພະລັງງານ ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
-
ຄວາມເຢັນ ແລະ ພະລັງງານທີ່ພຽງພໍສຳລັບຫົວ (ຖືກປະເມີນຄ່າຕໍ່າເກີນໄປຈົນກວ່າມັນຈະບໍ່ແມ່ນ 😬)
-
ສະພາບແວດລ້ອມທີ່ສາມາດຜະລິດຄືນໄດ້ (venv/conda ຫຼື ຕູ້ຄອນເທນເນີ) ດັ່ງນັ້ນການອັບເກຣດຈຶ່ງບໍ່ກາຍເປັນຄວາມວຸ້ນວາຍ ( ພາບລວມຂອງ NVIDIA Container Toolkit )
ແລະອີກຢ່າງໜຶ່ງທີ່ຄົນເຮົາມັກລືມ:
-
ນິໄສການຕິດຕາມກວດກາ - ທ່ານກວດສອບໜ່ວຍຄວາມຈຳ GPU ແລະ ການນຳໃຊ້ຄືກັບວ່າທ່ານກວດສອບກະຈົກໃນຂະນະທີ່ຂັບລົດ. ( ເອກະສານ NVIDIA nvidia-smi )
3) ຕາຕະລາງປຽບທຽບ - ວິທີທີ່ນິຍົມໃນການຝຶກອົບຮົມດ້ວຍ NVIDIA GPUs (ພ້ອມດ້ວຍຄວາມແປກປະຫຼາດ) 📊
ຂ້າງລຸ່ມນີ້ແມ່ນແບບຟອມສະຫຼຸບສັ້ນໆກ່ຽວກັບ "ອັນໃດທີ່ເໝາະສົມ?". ລາຄາແມ່ນຫຍາບຄາຍ (ເພາະວ່າຄວາມເປັນຈິງແຕກຕ່າງກັນ), ແລະແມ່ນແລ້ວໜຶ່ງໃນຫ້ອງເຫຼົ່ານີ້ແມ່ນມີການເຄື່ອນໄຫວເລັກນ້ອຍ, ໂດຍເຈດຕະນາ.
| ເຄື່ອງມື / ວິທີການ | ດີທີ່ສຸດສຳລັບ | ລາຄາ | ເປັນຫຍັງມັນຈຶ່ງໃຊ້ໄດ້ (ສ່ວນຫຼາຍແມ່ນ) |
|---|---|---|---|
| PyTorch (ວານິລາ) PyTorch | ຄົນສ່ວນໃຫຍ່, ໂຄງການສ່ວນໃຫຍ່ | ຟຣີ | ລະບົບນິເວດທີ່ມີຄວາມຍືດຫຍຸ່ນ, ຂະໜາດໃຫຍ່, ການດີບັກງ່າຍ - ທຸກຄົນລ້ວນແຕ່ມີຄວາມຄິດເຫັນ |
| ເອກະສານ PyTorch Lightning | ທີມງານ, ການຝຶກອົບຮົມທີ່ມີໂຄງສ້າງ | ຟຣີ | ຫຼຸດຜ່ອນຮູບແບບການໃຊ້ງານ, ວົງຈອນທີ່ສະອາດກວ່າ; ບາງຄັ້ງຮູ້ສຶກຄືກັບ "ມະຫັດສະຈັນ", ຈົນກວ່າມັນຈະບໍ່ແມ່ນ |
| ເອກະສານຄູຝຶກສອນກ່ຽວ ກັບ Hugging Face Transformers + Trainer | ການປັບແຕ່ງ NLP + LLM | ຟຣີ | ການຝຶກອົບຮົມທີ່ມາພ້ອມກັບແບັດເຕີຣີ, ຄ່າເລີ່ມຕົ້ນທີ່ດີເລີດ, ໄຊຊະນະໄວ 👍 |
| ເອກະສານເລັ່ງ ລັດ | ຫຼາຍ GPU ໂດຍບໍ່ມີຄວາມເຈັບປວດ | ຟຣີ | ເຮັດໃຫ້ DDP ບໍ່ໜ້າລຳຄານ, ດີສຳລັບການຂະຫຍາຍໂດຍບໍ່ຕ້ອງຂຽນທຸກຢ່າງຄືນໃໝ່ |
| DeepSpeed ZeRO | ຮູບແບບໃຫຍ່, ເຄັດລັບຄວາມຊົງຈຳ | ຟຣີ | ZeRO, offload, scaling - ອາດຈະຫຍຸ້ງຍາກແຕ່ກໍ່ໜ້າພໍໃຈເມື່ອມັນຄລິກ |
| TensorFlow + Keras TF | ທໍ່ສົ່ງການຜະລິດ | ຟຣີ | ເຄື່ອງມືທີ່ເຂັ້ມແຂງ, ເລື່ອງການນຳໃຊ້ທີ່ດີ; ບາງຄົນມັກມັນ, ບາງຄົນກໍ່ບໍ່ມັກຢ່າງງຽບໆ |
| JAX + Flax JAX Quickstart / ເອກະສານ Flax | ການຄົ້ນຄວ້າ + ຄວາມຮູ້ຄວາມໄວ | ຟຣີ | ການລວບລວມ XLA ສາມາດໄວຫຼາຍ, ແຕ່ການ debugging ສາມາດຮູ້ສຶກ…ບໍ່ມີຕົວຕົນ |
| ຂອງ NVIDIA NeMo NeMo | ຂັ້ນຕອນການເຮັດວຽກການປາກເວົ້າ + LLM | ຟຣີ | ການຊ້ອນກັນທີ່ປັບປຸງໃຫ້ດີທີ່ສຸດໂດຍ NVIDIA, ສູດອາຫານທີ່ດີ - ຮູ້ສຶກຄືກັບການແຕ່ງກິນດ້ວຍເຕົາອົບທີ່ທັນສະໄໝ 🍳 |
| ພາບລວມຂອງຊຸດເຄື່ອງ ມື Docker + NVIDIA Container Toolkit | ສະພາບແວດລ້ອມທີ່ສາມາດຜະລິດຄືນໄດ້ | ຟຣີ | "ເຮັດວຽກຢູ່ໃນເຄື່ອງຂອງຂ້ອຍ" ກາຍເປັນ "ເຮັດວຽກຢູ່ໃນເຄື່ອງຂອງພວກເຮົາ" (ສ່ວນຫຼາຍແມ່ນ, ອີກເທື່ອໜຶ່ງ) |
4) ຂັ້ນຕອນທີໜຶ່ງ - ຢືນຢັນວ່າ GPU ຂອງທ່ານຖືກເບິ່ງເຫັນຢ່າງຖືກຕ້ອງ 🕵️♂️
ກ່ອນທີ່ທ່ານຈະຕິດຕັ້ງສິ່ງຂອງຫຼາຍຢ່າງ, ໃຫ້ກວດສອບພື້ນຖານກ່ອນ.
ສິ່ງທີ່ເຈົ້າຢາກໃຫ້ເປັນຄວາມຈິງ:
-
ເຄື່ອງເຫັນ GPU
-
ໄດຣເວີ NVIDIA ຖືກຕິດຕັ້ງຢ່າງຖືກຕ້ອງ
-
GPU ບໍ່ໄດ້ຕິດຢູ່ກັບການເຮັດສິ່ງອື່ນ
-
ສາມາດສອບຖາມໄດ້ຢ່າງໜ້າເຊື່ອຖື
ການກວດສອບແບບຄລາສສິກແມ່ນ:
-
nvidia-smi( ເອກະສານ NVIDIA nvidia-smi )
ສິ່ງທີ່ທ່ານກຳລັງຊອກຫາ:
-
ຊື່ GPU (ເຊັ່ນ: RTX, A-series, ແລະອື່ນໆ)
-
ເວີຊັນໄດຣເວີ
-
ການໃຊ້ໜ່ວຍຄວາມຈຳ
-
ຂະບວນການແລ່ນ ( ເອກະສານ NVIDIA nvidia-smi )
ຖ້າ nvidia-smi ລົ້ມເຫຼວ, ໃຫ້ຢຸດຢູ່ທີ່ນັ້ນ. ຢ່າຕິດຕັ້ງ frameworks ເທື່ອ. ມັນຄືກັບການພະຍາຍາມອົບເຂົ້າຈີ່ໃນເວລາທີ່ເຕົາອົບຂອງເຈົ້າບໍ່ໄດ້ສຽບປລັກ. ( NVIDIA System Management Interface (NVSMI) )
ໝາຍເຫດເລັກນ້ອຍຂອງມະນຸດ: ບາງຄັ້ງ nvidia-smi ໃຊ້ໄດ້ແຕ່ການຝຶກອົບຮົມຂອງເຈົ້າຍັງລົ້ມເຫຼວເພາະວ່າ CUDA runtime ທີ່ໃຊ້ໂດຍ framework ຂອງເຈົ້າບໍ່ກົງກັບຄວາມຄາດຫວັງຂອງໄດຣເວີ. ນັ້ນບໍ່ແມ່ນເຈົ້າໂງ່. ນັ້ນແມ່ນ…ພຽງແຕ່ວິທີທີ່ມັນເປັນ 😭 ( PyTorch Get Started (CUDA selector) , TensorFlow install (pip) )
5) ສ້າງຊຸດຊອບແວ - ໄດຣເວີ, CUDA, cuDNN, ແລະ “ການເຕັ້ນລຳທີ່ເຂົ້າກັນໄດ້” 💃
ນີ້ແມ່ນບ່ອນທີ່ຄົນເຮົາເສຍເວລາຫຼາຍຊົ່ວໂມງ. ເຄັດລັບຄື: ເລືອກເສັ້ນທາງແລະຍຶດໝັ້ນກັບມັນ .
ທາງເລືອກ A: CUDA ທີ່ມາພ້ອມກັບ Framework (ມັກຈະງ່າຍທີ່ສຸດ)
ໂປຣແກຣມ PyTorch ຫຼາຍໂປຣແກຣມມາພ້ອມກັບ CUDA runtime ຂອງຕົນເອງ, ຊຶ່ງໝາຍຄວາມວ່າທ່ານບໍ່ຈຳເປັນຕ້ອງມີຊຸດເຄື່ອງມື CUDA ເຕັມຮູບແບບຕິດຕັ້ງໄວ້ທົ່ວລະບົບ. ສ່ວນຫຼາຍແລ້ວທ່ານພຽງແຕ່ຕ້ອງການໄດຣເວີ NVIDIA ທີ່ເຂົ້າກັນໄດ້. ( PyTorch Get Started (ຕົວເລືອກ CUDA) , PyTorch ລຸ້ນກ່ອນໜ້ານີ້ (ລໍ້ CUDA) )
ຂໍ້ດີ:
-
ຊິ້ນສ່ວນທີ່ເຄື່ອນທີ່ໜ້ອຍລົງ
-
ຕິດຕັ້ງງ່າຍຂຶ້ນ
-
ສາມາດຜະລິດຄືນໄດ້ຫຼາຍຂຶ້ນຕາມສະພາບແວດລ້ອມ
ຂໍ້ເສຍ:
-
ຖ້າທ່ານປະສົມປະສານສະພາບແວດລ້ອມຕ່າງໆຢ່າງບໍ່ເປັນທາງການ, ທ່ານອາດຈະສັບສົນ
ທາງເລືອກ B: ຊຸດເຄື່ອງມື CUDA ຂອງລະບົບ (ຄວບຄຸມເພີ່ມເຕີມ)
ເຈົ້າຕິດຕັ້ງຊຸດເຄື່ອງມື CUDA ໃນລະບົບ ແລະ ຈັດລຽງທຸກຢ່າງໃຫ້ກົງກັບມັນ. ( ເອກະສານ CUDA Toolkit )
ຂໍ້ດີ:
-
ການຄວບຄຸມເພີ່ມເຕີມສຳລັບການສ້າງແບບກຳນົດເອງ, ເຄື່ອງມືພິເສດບາງຢ່າງ
-
ສະດວກສຳລັບການລວບລວມບາງ ops
ຂໍ້ເສຍ:
-
ວິທີການເພີ່ມເຕີມໃນການບໍ່ກົງກັບເວີຊັນ ແລະ ຮ້ອງໄຫ້ຢ່າງງຽບໆ
cuDNN ແລະ NCCL, ໃນແງ່ຂອງມະນຸດ
-
cuDNN ເລັ່ງການຮຽນຮູ້ແບບເລິກເຊິ່ງ (convolutions, RNN bits, ແລະອື່ນໆ) ( ເອກະສານ NVIDIA cuDNN )
-
NCCL ແມ່ນຫ້ອງສະໝຸດ “ການສື່ສານ GPU ກັບ GPU” ທີ່ໄວທີ່ສຸດສຳລັບການຝຶກອົບຮົມຫຼາຍ GPU ( ພາບລວມຂອງ NCCL )
ຖ້າທ່ານເຮັດການຝຶກອົບຮົມຫຼາຍ GPU, NCCL ແມ່ນເພື່ອນທີ່ດີທີ່ສຸດຂອງທ່ານ - ແລະບາງຄັ້ງກໍ່ເປັນເພື່ອນຮ່ວມຫ້ອງທີ່ມີອາລົມດີຂອງທ່ານ. ( ພາບລວມຂອງ NCCL )
6) ການຝຶກຊ້ອມ GPU ຄັ້ງທຳອິດຂອງເຈົ້າ (ຕົວຢ່າງແນວຄິດຂອງ PyTorch) ✅🔥
ເພື່ອຕິດຕາມ ວິທີການໃຊ້ NVIDIA GPU ສຳລັບການຝຶກອົບຮົມ AI , ທ່ານບໍ່ຕ້ອງການໂຄງການໃຫຍ່ໆກ່ອນ. ທ່ານຕ້ອງການຄວາມສຳເລັດເລັກນ້ອຍ.
ແນວຄວາມຄິດຫຼັກ:
-
ກວດຫາອຸປະກອນ
-
ຍ້າຍຮູບແບບໄປຫາ GPU
-
ຍ້າຍ tensor ໄປຫາ GPU
-
ຢືນຢັນວ່າການສົ່ງຕໍ່ດຳເນີນການຢູ່ທີ່ນັ້ນ ( ເອກະສານ PyTorch CUDA )
ສິ່ງທີ່ຂ້ອຍກວດສອບສະຕິສະເໝີແຕ່ຫົວທີ:
-
torch.cuda.is_available()ສົ່ງຄືນຄ່າ True( torch.cuda.is_available ) -
next(model.parameters()).deviceສະແດງcuda( PyTorch Forum: ກວດສອບຮູບແບບໃນ CUDA ) -
ການສົ່ງຕໍ່ຄັ້ງດຽວບໍ່ມີຂໍ້ຜິດພາດ
-
ໜ່ວຍຄວາມຈຳ GPU ເພີ່ມຂຶ້ນເມື່ອທ່ານເລີ່ມການຝຶກອົບຮົມ (ເປັນສັນຍານທີ່ດີ!) ( ເອກະສານ NVIDIA nvidia-smi )
ຄຳຖາມທົ່ວໄປທີ່ວ່າ "ເປັນຫຍັງມັນຊ້າ?" ເຂົ້າໃຈຜິດ
-
ຕົວໂຫຼດຂໍ້ມູນຂອງເຈົ້າຊ້າເກີນໄປ (GPU ລໍຖ້າຢູ່) ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
-
ເຈົ້າລືມຍ້າຍຂໍ້ມູນໄປຫາ GPU (ອຸ້ຍ)
-
ຂະໜາດຂອງຊຸດມີຂະໜາດນ້ອຍ (GPU ບໍ່ໄດ້ໃຊ້ປະໂຫຍດ)
-
ທ່ານກຳລັງປະມວນຜົນ CPU ລ່ວງໜ້າຢ່າງໜັກຢູ່ໃນຂັ້ນຕອນການຝຶກອົບຮົມ
ນອກຈາກນັ້ນ, ແມ່ນແລ້ວ, GPU ຂອງເຈົ້າມັກຈະເບິ່ງຄືວ່າ "ບໍ່ຫຍຸ້ງຫຼາຍ" ຖ້າບັນຫາແມ່ນຂໍ້ມູນ. ມັນຄືກັບການຈ້າງຄົນຂັບລົດແຂ່ງແລ້ວໃຫ້ພວກເຂົາລໍຖ້ານໍ້າມັນທຸກໆຮອບ.
7) ເກມ VRAM - ຂະໜາດເປັນຊຸດ, ຄວາມແມ່ນຍຳປະສົມ, ແລະ ບໍ່ລະເບີດ 💥🧳
ບັນຫາການຝຶກອົບຮົມຕົວຈິງສ່ວນໃຫຍ່ແມ່ນຂຶ້ນກັບຄວາມຊົງຈຳ. ຖ້າທ່ານຮຽນຮູ້ທັກສະໜຶ່ງ, ໃຫ້ຮຽນຮູ້ການຈັດການ VRAM.
ວິທີໄວໃນການຫຼຸດຜ່ອນການໃຊ້ໜ່ວຍຄວາມຈຳ
-
ຄວາມແມ່ນຍຳປະສົມ (FP16/BF16)
-
ໂດຍປົກກະຕິແລ້ວການເພີ່ມຄວາມໄວສູງຄືກັນ. ທັງສອງຝ່າຍໄດ້ຜົນປະໂຫຍດ 😌 ( ເອກະສານ PyTorch AMP , ຄູ່ມືຄວາມແມ່ນຍໍາປະສົມ TensorFlow )
-
-
ການສະສົມລະດັບຄວາມຊັນ
-
ຈຳລອງຂະໜາດກຸ່ມທີ່ໃຫຍ່ກວ່າໂດຍການສະສົມການໄລ່ສີໃນຫຼາຍຂັ້ນຕອນ ( ເອກະສານການຝຶກອົບຮົມ Transformers (ການສະສົມການໄລ່ສີ, fp16) )
-
-
ຄວາມຍາວຂອງລຳດັບ / ຂະໜາດການຕັດທີ່ນ້ອຍກວ່າ
-
ໂຫດຮ້າຍແຕ່ມີປະສິດທິພາບ
-
-
ຈຸດກວດສອບການເປີດໃຊ້ງານ
-
ການຄ້າການຄິດໄລ່ສຳລັບໜ່ວຍຄວາມຈຳ (ຄິດໄລ່ການເປີດໃຊ້ງານຄືນໃໝ່ໃນລະຫວ່າງການຍ້ອນກັບ) ( torch.utils.checkpoint )
-
-
ໃຊ້ຕົວເພີ່ມປະສິດທິພາບທີ່ເບົາກວ່າ
-
ຕົວເພີ່ມປະສິດທິພາບບາງອັນເກັບຮັກສາສະຖານະພິເສດທີ່ກັດ VRAM
-
ຊ່ວງເວລາ “ເປັນຫຍັງ VRAM ຍັງເຕັມຫຼັງຈາກຂ້ອຍຢຸດ?”
ເຟຣມເວີກມັກ ຈະເກັບຂໍ້ມູນໄວ້ໃນໜ່ວຍຄວາມຈຳ ເພື່ອປະສິດທິພາບ. ນີ້ແມ່ນເລື່ອງປົກກະຕິ. ມັນເບິ່ງຄືວ່າໜ້າຢ້ານແຕ່ມັນບໍ່ແມ່ນການຮົ່ວໄຫຼສະເໝີໄປ. ເຈົ້າຮຽນຮູ້ທີ່ຈະອ່ານຮູບແບບຕ່າງໆ. ( PyTorch CUDA semantics: caching allocator )
ນິໄສປະຕິບັດ:
-
ເບິ່ງໜ່ວຍຄວາມຈຳທີ່ຈັດສັນໄວ້ ທຽບກັບ ໜ່ວຍຄວາມຈຳທີ່ສະຫງວນໄວ້ (ສະເພາະເຟຣມເວີກ) ( PyTorch CUDA semantics: caching allocator )
-
ຢ່າຕົກໃຈກັບຕົວເລກທຳອິດທີ່ໜ້າຢ້ານ 😅
8) ເຮັດໃຫ້ GPU ເຮັດວຽກໄດ້ແທ້ - ການປັບແຕ່ງປະສິດທິພາບທີ່ຄຸ້ມຄ່າກັບເວລາຂອງທ່ານ 🏎️
ການເຮັດໃຫ້ "ການຝຶກອົບຮົມ GPU ເຮັດວຽກ" ແມ່ນຂັ້ນຕອນທີໜຶ່ງ. ການເຮັດໃຫ້ມັນ ໄວ ແມ່ນຂັ້ນຕອນທີສອງ.
ການເພີ່ມປະສິດທິພາບທີ່ມີຜົນກະທົບສູງ
-
ເພີ່ມຂະໜາດຂອງຊຸດ (ຈົນກວ່າຈະເຈັບ, ຈາກນັ້ນຄ່ອຍໆຫຼຸດອອກ)
-
ໃຊ້ໜ່ວຍຄວາມຈຳທີ່ຖືກປັກໝຸດໄວ້ ໃນຕົວໂຫຼດຂໍ້ມູນ (ສຳເນົາຈາກໂຮດໄປຫາອຸປະກອນໄດ້ໄວຂຶ້ນ) ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch , ບົດແນະນຳກ່ຽວກັບ PyTorch pin_memory/non_blocking )
-
ເພີ່ມພະນັກງານໂຫຼດຂໍ້ມູນ (ລະວັງ, ຫຼາຍເກີນໄປອາດຈະເຮັດໃຫ້ເກີດບັນຫາກັບຄືນ) ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
-
ດຶງຂໍ້ມູນເປັນຊຸດລ່ວງໜ້າ ເພື່ອບໍ່ໃຫ້ GPU ເຮັດວຽກບໍ່ໄດ້
-
ໃຊ້ fused ops / kernels ທີ່ໄດ້ຮັບການປັບປຸງໃຫ້ດີທີ່ສຸດ ເມື່ອມີໃຫ້ໃຊ້
-
ໃຊ້ຄວາມແມ່ນຍຳປະສົມ (ອີກເທື່ອໜຶ່ງ, ມັນດີຫຼາຍ) ( ເອກະສານ PyTorch AMP )
ອຸປະສັກທີ່ຖືກມອງຂ້າມຫຼາຍທີ່ສຸດ
ການເກັບຮັກສາ ແລະ ຂັ້ນຕອນການປະມວນຜົນກ່ອນຂອງທ່ານ. ຖ້າຊຸດຂໍ້ມູນຂອງທ່ານມີຂະໜາດໃຫຍ່ ແລະ ເກັບໄວ້ໃນແຜ່ນດິດທີ່ຊ້າ, GPU ຂອງທ່ານຈະກາຍເປັນເຄື່ອງເຮັດຄວາມຮ້ອນພື້ນທີ່ທີ່ມີລາຄາແພງ. ເຄື່ອງເຮັດຄວາມຮ້ອນພື້ນທີ່ທີ່ກ້າວໜ້າຫຼາຍ ແລະ ເຫຼື້ອມເປັນເງົາງາມຫຼາຍ.
ນອກຈາກນັ້ນ, ຂໍສາລະພາບເລັກນ້ອຍ: ຂ້ອຍໄດ້ "ປັບປຸງ" ຮູບແບບເປັນເວລາໜຶ່ງຊົ່ວໂມງ ແຕ່ກໍ່ຮູ້ວ່າການບັນທຶກແມ່ນຈຸດທີ່ເຮັດໃຫ້ເກີດບັນຫາ. ການພິມຫຼາຍເກີນໄປສາມາດເຮັດໃຫ້ການຝຶກອົບຮົມຊ້າລົງ. ແມ່ນແລ້ວ, ມັນສາມາດເຮັດໄດ້.
9) ການຝຶກອົບຮົມຫຼາຍ GPU - DDP, NCCL, ແລະ ການຂະຫຍາຍໂດຍບໍ່ມີຄວາມວຸ້ນວາຍ 🧩🤝
ເມື່ອທ່ານຕ້ອງການຄວາມໄວຫຼາຍຂຶ້ນ ຫຼື ຮຸ່ນທີ່ໃຫຍ່ກວ່າ, ທ່ານກໍ່ໃຊ້ multi-GPU. ນີ້ແມ່ນບ່ອນທີ່ສິ່ງຕ່າງໆກາຍເປັນເລື່ອງທີ່ໜ້າຕື່ນເຕັ້ນ.
ວິທີການທົ່ວໄປ
-
ຂໍ້ມູນຂະໜານ (DDP)
-
ແບ່ງກຸ່ມຕ່າງໆໃນທົ່ວ GPU, ຊິ້ງຄ່າ gradients
-
ໂດຍປົກກະຕິແລ້ວຕົວເລືອກ "ດີ" ຕາມຄ່າເລີ່ມຕົ້ນ ( ເອກະສານ PyTorch DDP )
-
-
ຮູບແບບຂະໜານ / Tensor ຂະໜານ
-
ແບ່ງໂມເດວຕາມ GPU (ສຳລັບໂມເດວຂະໜາດໃຫຍ່ຫຼາຍ)
-
-
ທໍ່ສົ່ງນ້ຳຂະໜານ
-
ແບ່ງຊັ້ນຮູບແບບອອກເປັນຂັ້ນຕອນຕ່າງໆ (ຄືກັບສາຍການປະກອບ, ແຕ່ສຳລັບເທັນເຊີ)
-
ຖ້າທ່ານເລີ່ມຕົ້ນ, ການຝຶກອົບຮົມແບບ DDP ແມ່ນຈຸດທີ່ດີທີ່ສຸດ. ( ບົດແນະນຳ PyTorch DDP )
ຄຳແນະນຳທີ່ໃຊ້ໄດ້ຈິງຫຼາຍ GPU
-
ໃຫ້ແນ່ໃຈວ່າ GPU ມີຄວາມສາມາດຄ້າຍຄືກັນ (ການປະສົມສາມາດເປັນບັນຫາຄໍຂວດໄດ້)
-
ການເຊື່ອມຕໍ່ລະຫວ່າງໂມງ: NVLink ທຽບກັບ PCIe ມີຄວາມສຳຄັນຕໍ່ວຽກງານທີ່ມີການຊິ້ງຫຼາຍ ( ພາບລວມຂອງ NVIDIA NVLink , ເອກະສານ NVIDIA NVLink )
-
ຮັກສາຂະໜາດຂອງຊຸດຕໍ່ GPU ໃຫ້ສົມດຸນ
-
ຢ່າລະເລີຍ CPU ແລະ ບ່ອນເກັບຂໍ້ມູນ - ຫຼາຍ GPU ສາມາດເຮັດໃຫ້ເກີດບັນຫາຂໍ້ຈຳກັດຂອງຂໍ້ມູນໄດ້
ແລະແມ່ນແລ້ວ, ຄວາມຜິດພາດຂອງ NCCL ສາມາດຮູ້ສຶກຄືກັບປິດສະໜາທີ່ຫໍ່ດ້ວຍຄວາມລຶກລັບທີ່ຫໍ່ດ້ວຍ “ເປັນຫຍັງຕອນນີ້”. ເຈົ້າບໍ່ໄດ້ຖືກສາບແຊ່ງ. ອາດຈະແມ່ນ. ( ພາບລວມຂອງ NCCL )
10) ການຕິດຕາມກວດກາ ແລະ ການວິເຄາະໂປຣໄຟລ໌ - ສິ່ງທີ່ບໍ່ໜ້າສົນໃຈທີ່ຊ່ວຍປະຢັດເວລາຂອງທ່ານຫຼາຍຊົ່ວໂມງ 📈🧯
ທ່ານບໍ່ຕ້ອງການແຜງຄວບຄຸມທີ່ຫຼູຫຼາເພື່ອເລີ່ມຕົ້ນ. ທ່ານຈໍາເປັນຕ້ອງສັງເກດເຫັນເມື່ອມີບາງສິ່ງບາງຢ່າງຜິດປົກກະຕິ.
ສັນຍານສຳຄັນທີ່ຄວນຕິດຕາມ
-
ການນຳໃຊ້ GPU : ມັນສູງ ຫຼື ແຫຼມສະເໝີບໍ?
-
ການໃຊ້ໜ່ວຍຄວາມຈຳ : ໝັ້ນຄົງ, ເພີ່ມຂຶ້ນ, ຫຼື ແປກ?
-
ການໃຊ້ພະລັງງານ : ຕໍ່າຜິດປົກກະຕິອາດໝາຍເຖິງການນຳໃຊ້ພະລັງງານໜ້ອຍເກີນໄປ
-
ອຸນຫະພູມ : ອຸນຫະພູມສູງຢ່າງຕໍ່ເນື່ອງສາມາດຫຼຸດຜ່ອນປະສິດທິພາບໄດ້
-
ການໃຊ້ CPU : ບັນຫາທໍ່ສົ່ງຂໍ້ມູນສະແດງຢູ່ທີ່ນີ້ ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
ແນວຄິດການສ້າງໂປຣໄຟລ໌ (ສະບັບງ່າຍໆ)
-
ຖ້າ GPU ມີການນຳໃຊ້ຕໍ່າ - ຂໍ້ມູນ ຫຼື ຄໍຂວດຂອງ CPU
-
ຖ້າ GPU ສູງແຕ່ຊ້າ - ການຂາດປະສິດທິພາບຂອງເຄີເນລ, ຄວາມແມ່ນຍໍາ, ຫຼື ສະຖາປັດຕະຍະກໍາແບບຈໍາລອງ
-
ຖ້າຄວາມໄວໃນການຝຶກຊ້ອມຫຼຸດລົງແບບສຸ່ມ - ການຄວບຄຸມຄວາມຮ້ອນ, ຂະບວນການພື້ນຫຼັງ, ການຂາດ I/O
ຂ້ອຍຮູ້, ການຕິດຕາມກວດກາຟັງແລ້ວບໍ່ມ່ວນ. ແຕ່ມັນຄືກັບການໃຊ້ໄໝຂັດແຂ້ວ. ໜ້າລຳຄານ, ແລ້ວທັນທີທັນໃດຊີວິດຂອງເຈົ້າກໍ່ດີຂຶ້ນ.
11) ການແກ້ໄຂບັນຫາ - ຜູ້ຕ້ອງສົງໄສທົ່ວໄປ (ແລະຜູ້ທີ່ບໍ່ຄ່ອຍພົບເຫັນ) 🧰😵💫
ພາກນີ້ແມ່ນໂດຍພື້ນຖານແລ້ວ: "ບັນຫາຫ້າຢ່າງດຽວກັນ, ຕະຫຼອດໄປ."
ບັນຫາ: ໜ່ວຍຄວາມຈຳ CUDA ໝົດ
ການແກ້ໄຂ:
-
ຫຼຸດຂະໜາດຂອງຊຸດ
-
ໃຊ້ຄວາມແມ່ນຍຳປະສົມ ( ເອກະສານ PyTorch AMP , ຄູ່ມືຄວາມແມ່ນຍຳປະສົມ TensorFlow )
-
ການສະສົມຄວາມຊັນ ( ເອກະສານການຝຶກອົບຮົມກ່ຽວກັບ Transformers (ການສະສົມຄວາມຊັນ, fp16) )
-
ການເປີດໃຊ້ຈຸດກວດສອບ ( torch.utils.checkpoint )
-
ປິດຂະບວນການ GPU ອື່ນໆ
ບັນຫາ: ການຝຶກອົບຮົມເຮັດວຽກໂດຍໃຊ້ CPU ໂດຍບັງເອີນ
ການແກ້ໄຂ:
-
ຮັບປະກັນວ່າຮູບແບບຖືກຍ້າຍໄປ
cuda -
ຮັບປະກັນວ່າ tensors ຖືກຍ້າຍໄປ
cuda -
ກວດສອບການຕັ້ງຄ່າອຸປະກອນ framework ( ເອກະສານ PyTorch CUDA )
ບັນຫາ: ການຂັດຂ້ອງທີ່ແປກປະຫຼາດ ຫຼື ການເຂົ້າເຖິງໜ່ວຍຄວາມຈຳທີ່ຜິດກົດໝາຍ
ການແກ້ໄຂ:
-
ຢືນຢັນຄວາມເຂົ້າກັນໄດ້ຂອງໄດຣເວີ + ຣັນໄທມ໌ ( PyTorch Get Started (ຕົວເລືອກ CUDA) , ການຕິດຕັ້ງ TensorFlow (pip) )
-
ລອງໃຊ້ສະພາບແວດລ້ອມທີ່ສະອາດ
-
ຫຼຸດຜ່ອນການປະຕິບັດງານແບບກຳນົດເອງ
-
ເປີດໃຊ້ງານຄືນໃໝ່ດ້ວຍການຕັ້ງຄ່າແບບກຳນົດເພື່ອຜະລິດຊ້ຳ
ບັນຫາ: ຊ້າກວ່າທີ່ຄາດໄວ້
ການແກ້ໄຂ:
-
ກວດສອບອັດຕາການສົ່ງຂໍ້ມູນຂອງຕົວໂຫຼດຂໍ້ມູນ ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
-
ເພີ່ມຂະໜາດຂອງຊຸດ
-
ຫຼຸດຜ່ອນການຕັດໄມ້
-
ເປີດໃຊ້ຄວາມແມ່ນຍຳປະສົມ ( ເອກະສານ PyTorch AMP )
-
ການແບ່ງຂັ້ນຕອນເວລາໂປຣໄຟລ໌
ບັນຫາ: Multi-GPU ຄ້າງ
ການແກ້ໄຂ:
-
ຢືນຢັນການຕັ້ງຄ່າ backend ທີ່ຖືກຕ້ອງ ( ເອກະສານແຈກຢາຍ PyTorch )
-
ກວດສອບການຕັ້ງຄ່າສະພາບແວດລ້ອມ NCCL (ລະມັດລະວັງ) ( ພາບລວມຂອງ NCCL )
-
ທົດສອບ GPU ດຽວກ່ອນ
-
ຮັບປະກັນວ່າເຄືອຂ່າຍ / ການເຊື່ອມຕໍ່ລະຫວ່າງເຄືອຂ່າຍມີສຸຂະພາບດີ
ຂໍ້ສັງເກດນ້ອຍໆທີ່ຄວນຈື່ໄວ້: ບາງຄັ້ງການແກ້ໄຂກໍ່ຄືການຣີບູດເຄື່ອງໃໝ່. ມັນຮູ້ສຶກໂງ່ໆ. ມັນໃຊ້ໄດ້. ຄອມພິວເຕີກໍ່ເປັນແບບນັ້ນແຫຼະ.
12) ຄ່າໃຊ້ຈ່າຍ ແລະ ການນຳໃຊ້ໄດ້ຈິງ - ການເລືອກ GPU ແລະ ການຕັ້ງຄ່າ NVIDIA ທີ່ເໝາະສົມໂດຍບໍ່ຕ້ອງຄິດຫຼາຍເກີນໄປ 💸🧠
ບໍ່ແມ່ນທຸກໆໂຄງການຕ້ອງການ GPU ທີ່ໃຫຍ່ທີ່ສຸດ. ບາງຄັ້ງທ່ານຕ້ອງການ GPU ພຽງພໍ
ຖ້າທ່ານກຳລັງປັບແຕ່ງຮູບແບບຂະໜາດກາງ
-
ໃຫ້ຄວາມສຳຄັນກັບ VRAM ແລະ ຄວາມໝັ້ນຄົງ
-
ຄວາມແມ່ນຍຳແບບປະສົມຊ່ວຍໄດ້ຫຼາຍ ( ເອກະສານ PyTorch AMP , ຄູ່ມືຄວາມແມ່ນຍຳແບບປະສົມ TensorFlow )
-
ເຈົ້າມັກຈະສາມາດຫຼີກລ່ຽງໄດ້ດ້ວຍ GPU ທີ່ເຂັ້ມແຂງອັນດຽວ
ຖ້າທ່ານກຳລັງຝຶກອົບຮົມຕົວແບບທີ່ໃຫຍ່ກວ່າຕັ້ງແຕ່ເລີ່ມຕົ້ນ
-
ເຈົ້າຕ້ອງການ GPU ຫຼາຍອັນ ຫຼື VRAM ຂະໜາດໃຫຍ່ຫຼາຍ
-
ທ່ານຈະສົນໃຈກ່ຽວກັບ NVLink ແລະຄວາມໄວໃນການສື່ສານ ( ພາບລວມຂອງ NVIDIA NVLink , ພາບລວມຂອງ NCCL )
-
ເຈົ້າອາດຈະໃຊ້ຕົວເພີ່ມປະສິດທິພາບໜ່ວຍຄວາມຈຳ (ZeRO, offload, ແລະອື່ນໆ) ( ເອກະສານ DeepSpeed ZeRO , ການຄົ້ນຄວ້າຂອງ Microsoft: ZeRO/DeepSpeed )
ຖ້າທ່ານກຳລັງເຮັດການທົດລອງ
-
ເຈົ້າຕ້ອງການການເຮັດຊ້ຳໄວໆ
-
ຢ່າໃຊ້ເງິນທັງໝົດຂອງເຈົ້າໃສ່ GPU ແລະຈາກນັ້ນກໍ່ເຮັດໃຫ້ພື້ນທີ່ເກັບຂໍ້ມູນ ແລະ RAM ຫຼຸດລົງ
-
ລະບົບທີ່ສົມດຸນຈະເອົາຊະນະລະບົບທີ່ບໍ່ສົມດຸນ (ສ່ວນຫຼາຍແມ່ນທຸກມື້)
ແລະໃນຄວາມເປັນຈິງ, ເຈົ້າສາມາດເສຍເວລາຫຼາຍອາທິດໃນການໄລ່ຕາມການເລືອກຮາດແວທີ່ "ສົມບູນແບບ". ສ້າງບາງສິ່ງບາງຢ່າງທີ່ໃຊ້ໄດ້ຜົນ, ວັດແທກ, ແລ້ວປັບ. ສັດຕູທີ່ແທ້ຈິງບໍ່ແມ່ນການມີວົງຈອນຄຳຕິຊົມ.
ບັນທຶກສຸດທ້າຍ - ວິທີການໃຊ້ NVIDIA GPU ສຳລັບການຝຶກອົບຮົມ AI ໂດຍບໍ່ສູນເສຍສະຕິ 😌✅
ຖ້າທ່ານບໍ່ໄດ້ໃຊ້ຫຍັງອີກຈາກຄູ່ມືນີ້ກ່ຽວກັບ ວິທີການໃຊ້ NVIDIA GPU ສຳລັບການຝຶກອົບຮົມ AI , ໃຫ້ໃຊ້ອັນນີ້:
-
ໃຫ້ແນ່ໃຈວ່າ
nvidia-smiເຮັດວຽກກ່ອນ ( ເອກະສານ NVIDIA nvidia-smi ) -
ເລືອກເສັ້ນທາງຊອບແວທີ່ສະອາດ (CUDA ທີ່ມາພ້ອມກັບ framework ມັກຈະງ່າຍທີ່ສຸດ) ( PyTorch Get Started (ຕົວເລືອກ CUDA) )
-
ກວດສອບຄວາມຖືກຕ້ອງຂອງການຝຶກອົບຮົມ GPU ຂະໜາດນ້ອຍກ່ອນທີ່ຈະຂະຫຍາຍຂະໜາດ ( torch.cuda.is_available )
-
ຈັດການ VRAM ຄືກັບວ່າມັນເປັນຊັ້ນວາງຕູ້ເກັບມ້ຽນທີ່ມີຈຳກັດ
-
ໃຊ້ຄວາມແມ່ນຍຳປະສົມແຕ່ຫົວທີ - ມັນບໍ່ພຽງແຕ່ເປັນ "ສິ່ງທີ່ກ້າວໜ້າ" ເທົ່ານັ້ນ ( ເອກະສານ PyTorch AMP , ຄູ່ມືຄວາມແມ່ນຍຳປະສົມ TensorFlow )
-
ຖ້າມັນຊ້າ, ໃຫ້ສົງໃສວ່າຕົວໂຫຼດຂໍ້ມູນ ແລະ I/O ກ່ອນທີ່ຈະຕຳນິ GPU ( ຄູ່ມືການປັບແຕ່ງປະສິດທິພາບ PyTorch )
-
Multi-GPU ມີປະສິດທິພາບສູງແຕ່ເພີ່ມຄວາມຊັບຊ້ອນ - ຄ່ອຍໆຂະຫຍາຍອອກໄປ ( ເອກະສານ PyTorch DDP , ພາບລວມຂອງ NCCL )
-
ຕິດຕາມການນຳໃຊ້ ແລະ ອຸນຫະພູມ ເພື່ອໃຫ້ບັນຫາປາກົດຂຶ້ນແຕ່ຫົວທີ ( ເອກະສານ NVIDIA nvidia-smi )
ການຝຶກຊ້ອມກ່ຽວກັບ GPU ຂອງ NVIDIA ແມ່ນໜຶ່ງໃນທັກສະເຫຼົ່ານັ້ນທີ່ຮູ້ສຶກຢ້ານກົວ, ແຕ່ທັນໃດນັ້ນມັນກໍ່ກາຍເປັນ...ປົກກະຕິ. ຄືກັບການຮຽນຂັບລົດ. ໃນຕອນທຳອິດທຸກຢ່າງມີສຽງດັງ ແລະ ສັບສົນ ແລະ ເຈົ້າຈັບພວງມາໄລແຮງເກີນໄປ. ແລ້ວມື້ໜຶ່ງເຈົ້າກໍ່ຂັບລົດ, ຈິບກາເຟ, ແລະ ແກ້ໄຂບັນຫາຂະໜາດຂອງ batch ຢ່າງສະບາຍໆຄືກັບວ່າມັນບໍ່ແມ່ນເລື່ອງໃຫຍ່ ☕😄
ຄຳຖາມທີ່ຖືກຖາມເລື້ອຍໆ
ມັນໝາຍຄວາມວ່າແນວໃດທີ່ຈະຝຶກອົບຮົມແບບຈຳລອງ AI ໃນ GPU NVIDIA
ການຝຶກອົບຮົມໃນ NVIDIA GPU ໝາຍຄວາມວ່າພາລາມິເຕີຂອງໂມເດວ ແລະ ກຸ່ມການຝຶກອົບຮົມຂອງທ່ານຢູ່ໃນ GPU VRAM, ແລະ ຄະນິດສາດທີ່ໜັກໜ່ວງ (forward pass, backprop, ຂັ້ນຕອນ optimizer) ຈະປະຕິບັດຜ່ານ kernel CUDA. ໃນທາງປະຕິບັດ, ສິ່ງນີ້ມັກຈະຂຶ້ນກັບການຮັບປະກັນວ່າໂມເດວ ແລະ tensors ຢູ່ໃນ cuda , ຈາກນັ້ນຕິດຕາມໜ່ວຍຄວາມຈຳ, ການນຳໃຊ້, ແລະ ອຸນຫະພູມເພື່ອໃຫ້ throughput ຄົງທີ່.
ວິທີການຢືນຢັນວ່າ GPU NVIDIA ເຮັດວຽກກ່ອນທີ່ຈະຕິດຕັ້ງສິ່ງອື່ນໃດ
ເລີ່ມຕົ້ນດ້ວຍ nvidia-smi . ມັນຄວນສະແດງຊື່ GPU, ເວີຊັນຂອງໄດຣເວີ, ການໃຊ້ໜ່ວຍຄວາມຈຳປັດຈຸບັນ, ແລະ ຂະບວນການຕ່າງໆທີ່ກຳລັງເຮັດວຽກ. ຖ້າ nvidia-smi ລົ້ມເຫຼວ, ໃຫ້ລໍຖ້າ PyTorch/TensorFlow/JAX - ແກ້ໄຂການເບິ່ງເຫັນໄດຣເວີກ່ອນ. ມັນເປັນພື້ນຖານ "ເຕົາອົບສຽບຢູ່ແລ້ວບໍ" ການກວດສອບການຝຶກອົບຮົມ GPU.
ການເລືອກລະຫວ່າງລະບົບ CUDA ແລະ CUDA ທີ່ມາພ້ອມກັບ PyTorch
ວິທີການທົ່ວໄປແມ່ນການໃຊ້ CUDA ທີ່ມາພ້ອມກັບ framework (ເຊັ່ນດຽວກັບລໍ້ PyTorch ຫຼາຍອັນ) ເພາະມັນຊ່ວຍຫຼຸດຜ່ອນຊິ້ນສ່ວນທີ່ເຄື່ອນທີ່ - ສ່ວນໃຫຍ່ທ່ານຕ້ອງການໄດຣເວີ NVIDIA ທີ່ເຂົ້າກັນໄດ້. ການຕິດຕັ້ງຊຸດເຄື່ອງມື CUDA ເຕັມລະບົບສະເໜີການຄວບຄຸມຫຼາຍຂຶ້ນ (ການສ້າງແບບກຳນົດເອງ, ການລວບລວມການເຮັດວຽກ), ແຕ່ມັນຍັງນຳສະເໜີໂອກາດຫຼາຍຂຶ້ນສຳລັບຄວາມບໍ່ກົງກັນຂອງລຸ້ນ ແລະ ຄວາມຜິດພາດໃນເວລາແລ່ນທີ່ສັບສົນ.
ເປັນຫຍັງການຝຶກອົບຮົມຈຶ່ງຍັງຊ້າເຖິງແມ່ນວ່າຈະມີ GPU NVIDIA ກໍຕາມ
ໂດຍສ່ວນຫຼາຍແລ້ວ, GPU ມັກຈະຂາດແຄນຂໍ້ມູນຈາກທໍ່ສົ່ງຂໍ້ມູນ. ຕົວໂຫຼດຂໍ້ມູນທີ່ຊັກຊ້າ, ການປະມວນຜົນ CPU ລ່ວງໜ້າຫຼາຍພາຍໃນຂັ້ນຕອນການຝຶກອົບຮົມ, ຂະໜາດກຸ່ມຂໍ້ມູນຂະໜາດນ້ອຍ, ຫຼື ການເກັບຮັກສາທີ່ຊ້າ ລ້ວນແຕ່ສາມາດເຮັດໃຫ້ GPU ທີ່ມີປະສິດທິພາບເຮັດວຽກຄືກັບເຄື່ອງເຮັດຄວາມຮ້ອນພື້ນທີ່ຫວ່າງ. ການເພີ່ມພະນັກງານໂຫຼດຂໍ້ມູນ, ການເປີດໃຊ້ໜ່ວຍຄວາມຈຳທີ່ຖືກປັກໝຸດໄວ້, ການເພີ່ມການດຶງຂໍ້ມູນລ່ວງໜ້າ, ແລະ ການຕັດບັນທຶກແມ່ນການເຄື່ອນໄຫວທຳອິດທີ່ພົບເລື້ອຍກ່ອນທີ່ຈະຕຳນິຮູບແບບ.
ວິທີປ້ອງກັນຄວາມຜິດພາດ “CUDA ໝົດໜ່ວຍຄວາມຈຳ” ໃນລະຫວ່າງການຝຶກອົບຮົມ GPU NVIDIA
ການແກ້ໄຂສ່ວນໃຫຍ່ແມ່ນຍຸດທະວິທີ VRAM: ຫຼຸດຂະໜາດຂອງ batch, ເປີດໃຊ້ງານຄວາມແມ່ນຍຳແບບປະສົມ (FP16/BF16), ໃຊ້ການສະສົມ gradient, ຫຼຸດຄວາມຍາວຂອງ sequence/crop size, ຫຼື ໃຊ້ຈຸດກວດສອບການເປີດໃຊ້ງານ. ກວດສອບຂະບວນການ GPU ອື່ນໆທີ່ໃຊ້ໜ່ວຍຄວາມຈຳ. ການລອງຜິດລອງຖືກບາງຢ່າງເປັນເລື່ອງປົກກະຕິ - ການວາງແຜນງົບປະມານ VRAM ກາຍເປັນນິໄສຫຼັກໃນການຝຶກອົບຮົມ GPU ແບບປະຕິບັດຕົວຈິງ.
ເປັນຫຍັງ VRAM ຈຶ່ງຍັງສາມາດເບິ່ງເຕັມຫຼັງຈາກສະຄຣິບການຝຶກອົບຮົມສິ້ນສຸດລົງ
ເຟຣມເວີກມັກຈະເກັບໜ່ວຍຄວາມຈຳ GPU ໄວ້ເພື່ອຄວາມໄວ, ສະນັ້ນໜ່ວຍຄວາມຈຳທີ່ສະຫງວນໄວ້ສາມາດຍັງຄົງສູງໄດ້ເຖິງແມ່ນວ່າໜ່ວຍຄວາມຈຳທີ່ຈັດສັນໄວ້ຈະຫຼຸດລົງ. ມັນອາດຈະຄ້າຍຄືກັບການຮົ່ວໄຫຼ, ແຕ່ມັນມັກຈະເປັນຕົວຈັດສັນແຄດທີ່ປະພຶດຕົວຕາມທີ່ອອກແບບມາ. ນິໄສທີ່ໃຊ້ໄດ້ຈິງແມ່ນການຕິດຕາມຮູບແບບໃນໄລຍະເວລາ ແລະ ປຽບທຽບ “ຈັດສັນໄວ້ທຽບກັບສະຫງວນໄວ້” ແທນທີ່ຈະສຸມໃສ່ snapshot ດຽວທີ່ໜ້າຕົກໃຈ.
ວິທີການຢືນຢັນວ່າຮູບແບບບໍ່ໄດ້ຝຶກອົບຮົມຢ່າງງຽບໆໃນ CPU
ການກວດສອບຄວາມສະງົບກ່ອນໄວອັນຄວນ: ຢືນຢັນວ່າ torch.cuda.is_available() ສົ່ງຄືນ True , ກວດສອບ next(model.parameters()).device ສະແດງ cuda , ແລະແລ່ນສົ່ງຕໍ່ຄັ້ງດຽວໂດຍບໍ່ມີຂໍ້ຜິດພາດ. ຖ້າປະສິດທິພາບຮູ້ສຶກຊ້າຢ່າງໜ້າສົງໄສ, ໃຫ້ຢືນຢັນວ່າກຸ່ມຂອງທ່ານກຳລັງຖືກຍ້າຍໄປ GPU. ມັນເປັນເລື່ອງທຳມະດາທີ່ຈະຍ້າຍຮູບແບບແລະປະໄວ້ຂໍ້ມູນໄວ້ໂດຍບັງເອີນ.
ເສັ້ນທາງທີ່ງ່າຍທີ່ສຸດໃນການຝຶກອົບຮົມຫຼາຍ GPU
Data Parallel (ການຝຶກອົບຮົມແບບ DDP) ມັກຈະເປັນຂັ້ນຕອນທຳອິດທີ່ດີທີ່ສຸດ: ແບ່ງກຸ່ມ GPU ແລະ sync gradients. ເຄື່ອງມືເຊັ່ນ Accelerate ສາມາດເຮັດໃຫ້ multi-GPU ເຈັບປວດໜ້ອຍລົງໂດຍບໍ່ຕ້ອງຂຽນຄືນໃໝ່ເຕັມຮູບແບບ. ຄາດວ່າຈະມີຕົວແປເພີ່ມເຕີມ - ການສື່ສານ NCCL, ຄວາມແຕກຕ່າງຂອງການເຊື່ອມຕໍ່ (NVLink vs PCIe), ແລະ ການເພີ່ມຂຶ້ນຂອງຂໍ້ຈຳກັດຂອງຂໍ້ມູນທີ່ເພີ່ມຂຶ້ນ - ສະນັ້ນການຂະຫຍາຍເທື່ອລະກ້າວຫຼັງຈາກການໃຊ້ GPU ດຽວທີ່ແຂງແກ່ນມັກຈະດີຂຶ້ນ.
ສິ່ງທີ່ຄວນຕິດຕາມກວດກາໃນລະຫວ່າງການຝຶກອົບຮົມ GPU NVIDIA ເພື່ອກວດພົບບັນຫາຕ່າງໆແຕ່ຫົວທີ
ຕິດຕາມການນຳໃຊ້ GPU, ການໃຊ້ໜ່ວຍຄວາມຈຳ (ຄົງທີ່ vs ເພີ່ມຂຶ້ນ), ການໃຊ້ພະລັງງານ, ແລະ ອຸນຫະພູມ - ການຄວບຄຸມຄວາມໄວສາມາດເຮັດໃຫ້ຄວາມໄວຫຼຸດລົງຢ່າງງຽບໆ. ໃຫ້ຕິດຕາມການນຳໃຊ້ CPU ນຳ, ເນື່ອງຈາກບັນຫາທໍ່ສົ່ງຂໍ້ມູນມັກຈະປາກົດຂຶ້ນກ່ອນ. ຖ້າການນຳໃຊ້ມີຄວາມຄົມຊັດ ຫຼື ຕ່ຳ, ໃຫ້ສົງໃສວ່າ I/O ຫຼື ຕົວໂຫຼດຂໍ້ມູນ; ຖ້າມັນສູງແຕ່ເວລາຂັ້ນຕອນຍັງຊ້າ, ເຄີເນລໂປຣໄຟລ໌, ໂໝດຄວາມແມ່ນຍຳ, ແລະ ການແຍກເວລາຂັ້ນຕອນ.
ເອກະສານອ້າງອີງ
-
NVIDIA - ເອກະສານ NVIDIA nvidia-smi - docs.nvidia.com
-
NVIDIA - ອິນເຕີເຟດການຈັດການລະບົບ NVIDIA (NVSMI) - developer.nvidia.com
-
NVIDIA - ພາບລວມຂອງ NVIDIA NVLink - nvidia.com
-
PyTorch - ເລີ່ມຕົ້ນ PyTorch (ຕົວເລືອກ CUDA) - pytorch.org
-
PyTorch - ເອກະສານ PyTorch CUDA - docs.pytorch.org
-
TensorFlow - ການຕິດຕັ້ງ TensorFlow (pip) - tensorflow.org
-
JAX - ການເລີ່ມຕົ້ນດ່ວນຂອງ JAX - docs.jax.dev
-
ກອດໜ້າ - ເອກະສານຄູຝຶກ - huggingface.co
-
AI ຟ້າຜ່າ - ເອກະສານຟ້າຜ່າ - lightning.ai
-
DeepSpeed - ເອກະສານ ZeRO - deepspeed.readthedocs.io
-
ການຄົ້ນຄວ້າຂອງ Microsoft - ການຄົ້ນຄວ້າຂອງ Microsoft: ZeRO/DeepSpeed - microsoft.com
-
ເວທີສົນທະນາ PyTorch - ເວທີສົນທະນາ PyTorch: ກວດສອບຮູບແບບໃນ CUDA - discuss.pytorch.org