āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļšāđ€āļĢāļē

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡ āđāļĨāļ°āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™ LLM āļ”āđ‰āļ§āļĒ NVIDIA GPU āđāļĨāļ° CUDA

āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ AI 101

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ āļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡ āđāļĨāļ°āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™ LLM āļ”āđ‰āļ§āļĒ NVIDIA GPU āđāļĨāļ° CUDA

mm

āļāļēāļĢāļ•āļĩāļžāļīāļĄāļžāđŒ

 on

Nvidia GPU āđƒāļ™ Ubuntu āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡ GPU Parallel Computing GPU LLM Training Machine

āļŠāļēāļ‚āļēāļ›āļąāļāļāļēāļ›āļĢāļ°āļ”āļīāļĐāļāđŒ (AI) āđ„āļ”āđ‰āđ€āļŦāđ‡āļ™āļ„āļ§āļēāļĄāļāđ‰āļēāļ§āļŦāļ™āđ‰āļēāļ­āļĒāđˆāļēāļ‡āļ™āđˆāļēāļ—āļķāđˆāļ‡āđƒāļ™āļŠāđˆāļ§āļ‡āđ„āļĄāđˆāļāļĩāđˆāļ›āļĩāļ—āļĩāđˆāļœāđˆāļēāļ™āļĄāļē āđāļĨāļ°āļŦāļąāļ§āđƒāļˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡āđ€āļĢāļ·āđˆāļ­āļ‡āļ™āļĩāđ‰āļ­āļĒāļđāđˆāļ—āļĩāđˆāļāļēāļĢāļœāļŠāļĄāļœāļŠāļēāļ™āļ­āļąāļ™āļ—āļĢāļ‡āļžāļĨāļąāļ‡āļ‚āļ­āļ‡āļŦāļ™āđˆāļ§āļĒāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļāļĢāļēāļŸāļīāļ (GPU) āđāļĨāļ°āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļ‚āļ™āļēāļ™

āļĢāļļāđˆāļ™āđ€āļŠāđˆāļ™ āļˆāļĩāļžāļĩāļ—āļĩ, āđ€āļšāļīāļĢāđŒāļ•āđāļĨāļ°āļ­āļĩāļāđ„āļĄāđˆāļ™āļēāļ™āļ™āļĩāđ‰ āļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”, Mistral āļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ—āļģāļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļŦāļĄāļ·āļ­āļ™āļĄāļ™āļļāļĐāļĒāđŒāļ”āđ‰āļ§āļĒāļ„āļ§āļēāļĄāļ„āļĨāđˆāļ­āļ‡āđāļ„āļĨāđˆāļ§āđāļĨāļ°āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļāļąāļ™āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāđ„āļĄāđˆāđ€āļ„āļĒāļĄāļĩāļĄāļēāļāđˆāļ­āļ™ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļ—āļĢāļąāļžāļĒāļēāļāļĢāļāļēāļĢāļ„āļģāļ™āļ§āļ“āļˆāļģāļ™āļ§āļ™āļĄāļŦāļēāļĻāļēāļĨ āļ—āļģāđƒāļŦāđ‰ GPU āđāļĨāļ° CUDA āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļ‚āļēāļ”āđ„āļĄāđˆāđ„āļ”āđ‰āđƒāļ™āļ„āļ§āļēāļĄāļžāļĒāļēāļĒāļēāļĄāļ™āļĩāđ‰

āļ„āļđāđˆāļĄāļ·āļ­āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ™āļĩāđ‰āļˆāļ°āđāļ™āļ°āļ™āļģāļ„āļļāļ“āļ•āļĨāļ­āļ”āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē NVIDIA GPU āļšāļ™ Ubuntu āļ‹āļķāđˆāļ‡āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™ āđ€āļŠāđˆāļ™ āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒ NVIDIA, āļŠāļļāļ”āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ CUDA, cuDNN, PyTorch āđāļĨāļ°āļ­āļ·āđˆāļ™āđ†

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļ‚āļ­āļ‡āđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļ AI āļ—āļĩāđˆāđ€āļĢāđˆāļ‡āļ”āđ‰āļ§āļĒ CUDA

āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ—āļĩāđˆāđ€āļĢāđˆāļ‡āļ”āđ‰āļ§āļĒ GPU āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ‚āļąāļšāđ€āļ„āļĨāļ·āđˆāļ­āļ™āđ‚āļ”āļĒāļāļēāļĢāļžāļąāļ’āļ™āļēāļāļĢāļ­āļšāļ‡āļēāļ™ AI āļĒāļ­āļ”āļ™āļīāļĒāļĄāļ—āļĩāđˆāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ CUDA āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļāļĢāļ­āļšāđ€āļŠāđˆāļ™ TensorFlow, āđ„āļžāļ—āļ­āļĢāđŒāļŠāđāļĨāļ° MX āđ€āļ™āđ‡āļ• āļĄāļĩāļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļš CUDA āđƒāļ™āļ•āļąāļ§ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļšāļđāļĢāļ“āļēāļāļēāļĢāļāļēāļĢāđ€āļĢāđˆāļ‡āļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§ GPU āđ€āļ‚āđ‰āļēāļāļąāļšāđ„āļ›āļ›āđŒāđ„āļĨāļ™āđŒāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™

āļˆāļēāļāļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļžāļ·āđˆāļ­āļšāļĢāļĢāļĨāļļāđ€āļ›āđ‰āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ āļāļēāļĢāļĻāļķāļāļĐāļēāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ‚āļ­āļ‡āļĻāļđāļ™āļĒāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ NVIDIAāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ—āļĩāđˆāđ€āļĢāđˆāļ‡āļ”āđ‰āļ§āļĒ CUDA āļŠāļēāļĄāļēāļĢāļ–āļšāļĢāļĢāļĨāļļāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™āļŠāļđāļ‡āļŠāļļāļ” 100 āđ€āļ—āđˆāļē āđ€āļĄāļ·āđˆāļ­āđ€āļ—āļĩāļĒāļšāļāļąāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļšāļ™ CPU

āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ Multi-Instance GPU (MIG) āļ‚āļ­āļ‡ NVIDIA āļ‹āļķāđˆāļ‡āđ€āļ›āļīāļ”āļ•āļąāļ§āļžāļĢāđ‰āļ­āļĄāļāļąāļšāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ Ampere āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ GPU āļ•āļąāļ§āđ€āļ”āļĩāļĒāļ§āļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āļžāļēāļĢāđŒāļ•āļīāļŠāļąāļ™āļ­āļ­āļāđ€āļ›āđ‡āļ™āļŦāļĨāļēāļĒāļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāļ—āļĩāđˆāļ›āļĨāļ­āļ”āļ āļąāļĒ āđ‚āļ”āļĒāđāļ•āđˆāļĨāļ°āļ•āļąāļ§āļĄāļĩāļ—āļĢāļąāļžāļĒāļēāļāļĢāđ€āļ‰āļžāļēāļ°āļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡ āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āļ›āļąāļ™āļ—āļĢāļąāļžāļĒāļēāļāļĢ GPU āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļŦāļĨāļēāļĒāļĢāļēāļĒāļŦāļĢāļ·āļ­āļ›āļĢāļīāļĄāļēāļ“āļ‡āļēāļ™ āđ€āļžāļīāđˆāļĄāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļđāļ‡āļŠāļļāļ”āđāļĨāļ°āļĨāļ”āļ•āđ‰āļ™āļ—āļļāļ™āđ‚āļ”āļĒāļĢāļ§āļĄ

āđ€āļĢāđˆāļ‡āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™ LLM āļ”āđ‰āļ§āļĒ NVIDIA TensorRT

āđāļĄāđ‰āļ§āđˆāļē GPU āļˆāļ°āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ™āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ LLM āđāļ•āđˆāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāđ‡āļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāđ„āļĄāđˆāđāļžāđ‰āļāļąāļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļœāļĨāļīāļ• NVIDIA TensorRTāļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāđāļĨāļ°āļĢāļąāļ™āđ„āļ—āļĄāđŒāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡ āļĄāļĩāļšāļ—āļšāļēāļ—āļŠāļģāļ„āļąāļāđƒāļ™āļāļēāļĢāđ€āļĢāđˆāļ‡āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™ LLM āļšāļ™ GPU āļ—āļĩāđˆāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ CUDA

āļ•āļēāļĄāđ€āļāļ“āļ‘āđŒāļĄāļēāļ•āļĢāļāļēāļ™āļ‚āļ­āļ‡ NVIDIA TensorRT āļŠāļēāļĄāļēāļĢāļ–āļĄāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™āļŠāļđāļ‡āļŠāļļāļ” 8 āđ€āļ—āđˆāļē āđāļĨāļ°āļ•āđ‰āļ™āļ—āļļāļ™āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāđ€āļ›āđ‡āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āļĨāļ”āļĨāļ‡ 5 āđ€āļ—āđˆāļē āđ€āļĄāļ·āđˆāļ­āđ€āļ—āļĩāļĒāļšāļāļąāļšāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāđƒāļŠāđ‰ CPU āļŠāļģāļŦāļĢāļąāļšāļĢāļļāđˆāļ™āļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āđ€āļŠāđˆāļ™ GPT-3

āļ„āļ§āļēāļĄāļĄāļļāđˆāļ‡āļĄāļąāđˆāļ™āļ‚āļ­āļ‡ NVIDIA āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļĢāļīāđ€āļĢāļīāđˆāļĄāđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠāđ€āļ›āđ‡āļ™āđāļĢāļ‡āļœāļĨāļąāļāļ”āļąāļ™āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āļāļēāļĢāļ™āļģ CUDA āđ„āļ›āđƒāļŠāđ‰āļ­āļĒāđˆāļēāļ‡āļāļ§āđ‰āļēāļ‡āļ‚āļ§āļēāļ‡āđƒāļ™āļŠāļļāļĄāļŠāļ™āļāļēāļĢāļ§āļīāļˆāļąāļĒ AI āđ‚āļ„āļĢāļ‡āļāļēāļĢāđ€āļŠāđˆāļ™ āļ”āļĩāđ€āļ­āđ‡āļ™āđ€āļ­āđ‡āļ™, āļ„āļīāļ§āļšāļĨāļēāļŠāđāļĨāļ° āļ›.āļ›.āļŠ āļĄāļĩāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđƒāļ™āļĢāļđāļ›āđāļšāļšāļŦāđ‰āļ­āļ‡āļŠāļĄāļļāļ”āđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ™āļąāļāļ§āļīāļˆāļąāļĒāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļĻāļąāļāļĒāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”āļ‚āļ­āļ‡ CUDA āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ‚āļ­āļ‡āļžāļ§āļāđ€āļ‚āļē

āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡

āđ€āļĄāļ·āđˆāļ­āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļēāļĢāļžāļąāļ’āļ™āļē AI āļāļēāļĢāđƒāļŠāđ‰āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒāđāļĨāļ°āđ„āļĨāļšāļĢāļēāļĢāļĩāļĨāđˆāļēāļŠāļļāļ”āļ­āļēāļˆāđ„āļĄāđˆāđƒāļŠāđˆāļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āđ€āļŠāļĄāļ­āđ„āļ› āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŠāđˆāļ™ āđāļĄāđ‰āļ§āđˆāļēāđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒ NVIDIA āļĨāđˆāļēāļŠāļļāļ” (545.xx) āļĢāļ­āļ‡āļĢāļąāļš CUDA 12.3 āđāļ•āđˆ PyTorch āđāļĨāļ°āđ„āļĨāļšāļĢāļēāļĢāļĩāļ­āļ·āđˆāļ™āđ† āļ­āļēāļˆāļĒāļąāļ‡āđ„āļĄāđˆāļĢāļ­āļ‡āļĢāļąāļšāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ™āļĩāđ‰ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰ āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ 535.146.02 āļžāļĢāđ‰āļ­āļĄ CUDA 12.2 āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđāļ™āđˆāđƒāļˆāļ§āđˆāļēāđ€āļ‚āđ‰āļēāļāļąāļ™āđ„āļ”āđ‰

āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡

1. āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒ NVIDIA

āļ‚āļąāđ‰āļ™āđāļĢāļ āļĢāļ°āļšāļļāļĢāļļāđˆāļ™ GPU āļ‚āļ­āļ‡āļ„āļļāļ“ āļŠāļģāļŦāļĢāļąāļšāļ„āļģāđāļ™āļ°āļ™āļģāļ™āļĩāđ‰ āđ€āļĢāļēāđƒāļŠāđ‰ NVIDIA GPU āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄ āļŦāļ™āđ‰āļēāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒ NVIDIAāđ€āļĨāļ·āļ­āļāđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļš GPU āļ‚āļ­āļ‡āļ„āļļāļ“ āđāļĨāļ°āļˆāļ”āļšāļąāļ™āļ—āļķāļāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđ„āļ”āļĢāđ€āļ§āļ­āļĢāđŒ

āļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļžāđ‡āļ„āđ€āļāļˆ GPU āļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āđ„āļ§āđ‰āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāļšāļ™ Ubuntu āđƒāļŦāđ‰āļĢāļąāļ™:

sudo ubuntu-drivers list --gpgpu

āļĢāļĩāļšāļđāļ—āļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“āđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡:

nvidia-smi

2. āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŠāļļāļ”āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ CUDA

āļŠāļļāļ”āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ CUDA āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļžāļąāļ’āļ™āļēāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāđˆāđ€āļĢāđˆāļ‡āļ”āđ‰āļ§āļĒ GPU āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡

āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ—āļĩāđˆāđ„āļĄāđˆāđƒāļŠāđˆ LLM/āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰:

sudo apt install nvidia-cuda-toolkit

However, to ensure compatibility with BitsAndBytes, we will follow these steps:

[code language="BASH"]

git clone https://github.com/TimDettmers/bitsandbytes.git
cd bitsandbytes/
bash install_cuda.sh 122 ~/local 1

āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡:

~/local/cuda-12.2/bin/nvcc --version

āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ:

export CUDA_HOME=/home/roguser/local/cuda-12.2/
export LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64
export BNB_CUDA_VERSION=122
export CUDA_VERSION=122

3. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ cuDNN

āļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ” āđāļžāđ‡āļ„āđ€āļāļˆ cuDNN āļˆāļēāļ āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ™āļąāļāļžāļąāļ’āļ™āļē NVIDIA- āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļ”āđ‰āļ§āļĒ:

sudo apt install ./cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb

āļ—āļģāļ•āļēāļĄāļ„āļģāđāļ™āļ°āļ™āļģāđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļžāļ§āļ‡āļāļļāļāđāļˆ:

sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/

āļ•āļīāļ”āļ•āļąāđ‰āļ‡āđ„āļĨāļšāļĢāļēāļĢāļĩ cuDNN:

sudo apt update
sudo apt install libcudnn8 libcudnn8-dev libcudnn8-samples

4. āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāđ€āļŠāļĄāļ·āļ­āļ™āļˆāļĢāļīāļ‡āļ‚āļ­āļ‡ Python

Ubuntu 22.04 āļĄāļēāļžāļĢāđ‰āļ­āļĄāļāļąāļš Python 3.10 āļ•āļīāļ”āļ•āļąāđ‰āļ‡ venv:

sudo apt-get install python3-pip
sudo apt install python3.10-venv

āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāđ€āļŠāļĄāļ·āļ­āļ™:

cd
mkdir test-gpu
cd test-gpu
python3 -m venv venv
source venv/bin/activate

5. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ BitsAndBytes āļˆāļēāļāđāļŦāļĨāđˆāļ‡āļ—āļĩāđˆāļĄāļē

āļ™āļģāļ—āļēāļ‡āđ„āļ›āļĒāļąāļ‡āđ„āļ”āđ€āļĢāđ‡āļāļ—āļ­āļĢāļĩ BitsAndBytes āđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡āļˆāļēāļāđāļŦāļĨāđˆāļ‡āļ—āļĩāđˆāļĄāļē:

cd ~/bitsandbytes
CUDA_HOME=/home/roguser/local/cuda-12.2/ \
LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64 \
BNB_CUDA_VERSION=122 \
CUDA_VERSION=122 \
make cuda12x

CUDA_HOME=/home/roguser/local/cuda-12.2/ \
LD_LIBRARY_PATH=/home/roguser/local/cuda-12.2/lib64 \
BNB_CUDA_VERSION=122 \
CUDA_VERSION=122 \
python setup.py install

6. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ PyTorch

āļ•āļīāļ”āļ•āļąāđ‰āļ‡ PyTorch āļ”āđ‰āļ§āļĒāļ„āļģāļŠāļąāđˆāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

7. āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Hugging Face āđāļĨāļ° Transformers

āļ•āļīāļ”āļ•āļąāđ‰āļ‡āļŦāļĄāđ‰āļ­āđāļ›āļĨāļ‡āđāļĨāļ°āđ€āļĢāđˆāļ‡āđ„āļĨāļšāļĢāļēāļĢāļĩ:

pip install transformers
pip install accelerate

āļžāļĨāļąāļ‡āļ‚āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļ‚āļ™āļēāļ™

āđ‚āļ”āļĒāļ—āļĩāđˆāđāļāļ™āļŦāļĨāļąāļ GPU āļ„āļ·āļ­āđ‚āļ›āļĢāđ€āļ‹āļŠāđ€āļ‹āļ­āļĢāđŒāđāļšāļšāļ‚āļ™āļēāļ™āļŠāļđāļ‡āļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢāđ€āļ˜āļĢāļ”āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ™āļąāļšāļžāļąāļ™āđ€āļ˜āļĢāļ”āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ™āļĩāđ‰āļ—āļģāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļšāļ‡āļēāļ™āļ—āļĩāđˆāđ€āļ™āđ‰āļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‹āļķāđˆāļ‡āđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļ āļĢāļ§āļĄāļ–āļķāļ‡ LLM āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ CUDA āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāđ‚āļ”āļĒ NVIDIA āļĄāļ­āļšāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļļāļĄāļĻāļąāļāļĒāļ āļēāļžāļ‚āļ­āļ‡ GPU āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ•āđ‡āļĄāļ—āļĩāđˆ āļ—āļģāđƒāļŦāđ‰āļžāļ§āļāđ€āļ‚āļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļ‚āļ™āļēāļ™āļ‚āļ­āļ‡āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāđ„āļ”āđ‰
āđ€āļĢāđˆāļ‡ LLM āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāļ”āđ‰āļ§āļĒ GPU āđāļĨāļ° CUDA

āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđ€āļ›āđ‡āļ™āļ‡āļēāļ™āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļāļēāļĢāļ„āļģāļ™āļ§āļ“ āļ‹āļķāđˆāļ‡āļ•āđ‰āļ­āļ‡āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļˆāļģāļ™āļ§āļ™āļĄāļŦāļēāļĻāļēāļĨ āđāļĨāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ€āļĄāļ—āļĢāļīāļāļ‹āđŒāļˆāļģāļ™āļ§āļ™āļĄāļēāļ GPU āļ—āļĩāđˆāļĄāļĩāļ„āļ­āļĢāđŒāļŦāļĨāļēāļĒāļžāļąāļ™āļ„āļ­āļĢāđŒāđāļĨāļ°āđāļšāļ™āļ”āđŒāļ§āļīāļ˜āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļŠāļđāļ‡ āđ€āļŦāļĄāļēāļ°āļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āļŠāļģāļŦāļĢāļąāļšāļ‡āļēāļ™āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ āļ”āđ‰āļ§āļĒāļāļēāļĢāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ CUDA āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ‚āļ„āđ‰āļ”āļ‚āļ­āļ‡āļ•āļ™āđ€āļžāļ·āđˆāļ­āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļ‚āļ™āļēāļ™āļ‚āļ­āļ‡ GPU āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāļĨāļ”āđ€āļ§āļĨāļēāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ LLM āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļēāļ

āđ€āļŠāđˆāļ™ āļāļēāļĢāļˆāļąāļ”āļ­āļšāļĢāļĄ. GPT-3 āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ—āļĩāđˆāđƒāļŦāļāđˆāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™ āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ„āļ”āđ‰āļˆāļēāļāļāļēāļĢāđƒāļŠāđ‰ NVIDIA GPU āļŦāļĨāļēāļĒāļžāļąāļ™āļ•āļąāļ§āļ—āļĩāđˆāđƒāļŠāđ‰āđ‚āļ„āđ‰āļ”āļ—āļĩāđˆāļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļāļąāļš CUDA āļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļ—āļģāđƒāļŦāđ‰āđ‚āļĄāđ€āļ”āļĨāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļāļķāļāļāļ™āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāļ™āļ§āļ™āļ—āļĩāđˆāđ„āļĄāđˆāđ€āļ„āļĒāļĄāļĩāļĄāļēāļāđˆāļ­āļ™ āļ‹āļķāđˆāļ‡āļ™āļģāđ„āļ›āļŠāļđāđˆāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāļ™āđˆāļēāļ›āļĢāļ°āļ—āļąāļšāđƒāļˆāđƒāļ™āļ‡āļēāļ™āļ āļēāļĐāļēāļ˜āļĢāļĢāļĄāļŠāļēāļ•āļī

import torch
import torch.nn as nn
import torch.optim as optim
from transformers import GPT2LMHeadModel, GPT2Tokenizer

# Load pre-trained GPT-2 model and tokenizer
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# Move model to GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)

# Define training data and hyperparameters
train_data = [...] # Your training data
batch_size = 32
num_epochs = 10
learning_rate = 5e-5

# Define loss function and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# Training loop
for epoch in range(num_epochs):
for i in range(0, len(train_data), batch_size):
# Prepare input and target sequences
inputs, targets = train_data[i:i+batch_size]
inputs = tokenizer(inputs, return_tensors="pt", padding=True)
inputs = inputs.to(device)
targets = targets.to(device)

# Forward pass
outputs = model(**inputs, labels=targets)
loss = outputs.loss

# Backward pass and optimization
optimizer.zero_grad()
loss.backward()
optimizer.step()

print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļ™āļĩāđ‰ āđ€āļĢāļēāļŠāļēāļ˜āļīāļ•āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāļ‚āļ­āļ‡ āļˆāļĩāļžāļĩāļ—āļĩ-2 āđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāđ‚āļ”āļĒāđƒāļŠāđ‰ PyTorch āđāļĨāļ° GPU āļ—āļĩāđˆāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ CUDA āđ‚āļĄāđ€āļ”āļĨāļˆāļ°āļ–āļđāļāđ‚āļŦāļĨāļ”āļĨāļ‡āļšāļ™ GPU (āļ–āđ‰āļēāļĄāļĩ) āđāļĨāļ°āļĨāļđāļ›āļāļēāļĢāļāļķāļāļ‹āđ‰āļ­āļĄāļˆāļ°āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļ§āļēāļĄāļ‚āļ™āļēāļ™āļ‚āļ­āļ‡ GPU āđ€āļžāļ·āđˆāļ­āļŠāđˆāļ‡āļšāļ­āļĨāđ„āļ›āļ‚āđ‰āļēāļ‡āļŦāļ™āđ‰āļēāđāļĨāļ°āļ‚āđ‰āļēāļ‡āļŦāļĨāļąāļ‡āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđ€āļžāļ·āđˆāļ­āđ€āļĢāđˆāļ‡āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļāļķāļāļ‹āđ‰āļ­āļĄ

CUDA-Accelerated Libraries āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļ

āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ CUDA āđāļĨāđ‰āļ§ NVIDIA āđāļĨāļ°āļŠāļļāļĄāļŠāļ™āđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠāļĒāļąāļ‡āđ„āļ”āđ‰āļžāļąāļ’āļ™āļēāđ„āļĨāļšāļĢāļēāļĢāļĩāđˆāļ—āļĩāđˆāđ€āļĢāđˆāļ‡āļ”āđ‰āļ§āļĒ CUDA āļĄāļēāļāļĄāļēāļĒ āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāđ„āļ›āđƒāļŠāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļĢāļ§āļĄāļ–āļķāļ‡ LLM āđ„āļĨāļšāļĢāļēāļĢāļĩāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāđˆāļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ—āļąāđˆāļ§āđ„āļ› āđ€āļŠāđˆāļ™ āļāļēāļĢāļ„āļđāļ“āđ€āļĄāļ—āļĢāļīāļāļ‹āđŒ āļāļēāļĢāđ‚āļ™āđ‰āļĄāļ™āđ‰āļēāļ§ āđāļĨāļ°āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ™āļąāļāļžāļąāļ’āļ™āļēāļĄāļļāđˆāļ‡āđ€āļ™āđ‰āļ™āđ„āļ›āļ—āļĩāđˆāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāđāļĨāļ°āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ āđāļ—āļ™āļ—āļĩāđˆāļˆāļ°āļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāđƒāļ™āļĢāļ°āļ”āļąāļšāļ•āđˆāļģ

āđ„āļĨāļšāļĢāļēāļĢāļĩāļŦāļ™āļķāđˆāļ‡āļ”āļąāļ‡āļāļĨāđˆāļēāļ§āļ„āļ·āļ­ cuDNN (āđ„āļĨāļšāļĢāļēāļĢāļĩ CUDA Deep Neural Network) āļ‹āļķāđˆāļ‡āđƒāļŦāđ‰āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļđāļ—āļĩāļ™āļĄāļēāļ•āļĢāļāļēāļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļ­āļĒāđˆāļēāļ‡āļ”āļĩāļ‹āļķāđˆāļ‡āđƒāļŠāđ‰āđƒāļ™āđ‚āļ„āļĢāļ‡āļ‚āđˆāļēāļĒāļ›āļĢāļ°āļŠāļēāļ—āđ€āļ—āļĩāļĒāļĄāđ€āļŠāļīāļ‡āļĨāļķāļ āļ”āđ‰āļ§āļĒāļāļēāļĢāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ cuDNN āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāđˆāļ‡āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđāļĨāļ°āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āđ‚āļĄāđ€āļ”āļĨāļ‚āļ­āļ‡āļ•āļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ™āļąāļĒāļŠāļģāļ„āļąāļ āđ‚āļ”āļĒāļšāļĢāļĢāļĨāļļāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āđ„āļ”āđ‰āļŠāļđāļ‡āļŠāļļāļ”āļ–āļķāļ‡āļŦāļĨāļēāļĒāļĢāļ°āļ”āļąāļšāđ€āļĄāļ·āđˆāļ­āđ€āļ—āļĩāļĒāļšāļāļąāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāđˆāđƒāļŠāđ‰ CPU

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.cuda.amp import autocast

class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels, stride=1):
super().__init__()
self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)
self.bn1 = nn.BatchNorm2d(out_channels)
self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)
self.bn2 = nn.BatchNorm2d(out_channels)
self.shortcut = nn.Sequential()
if stride != 1 or in_channels != out_channels:
self.shortcut = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False),
nn.BatchNorm2d(out_channels))

def forward(self, x):
with autocast():
out = F.relu(self.bn1(self.conv1(x)))
out = self.bn2(self.conv2(out))
out += self.shortcut(x)
out = F.relu(out)
return out

āđƒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ„āđ‰āļ”āļ™āļĩāđ‰ āđ€āļĢāļēāļāļģāļŦāļ™āļ”āļšāļĨāđ‡āļ­āļāļ—āļĩāđˆāđ€āļŦāļĨāļ·āļ­āļŠāļģāļŦāļĢāļąāļšāđ‚āļ„āļĢāļ‡āļ‚āđˆāļēāļĒāļ›āļĢāļ°āļŠāļēāļ—āđ€āļ—āļĩāļĒāļĄāđāļšāļšāļŦāļĄāļļāļ™āļ§āļ™ (CNN) āđ‚āļ”āļĒāđƒāļŠāđ‰ PyTorch āļ•āļąāļ§āļˆāļąāļ”āļāļēāļĢāļšāļĢāļīāļšāļ—āļāļēāļĢāļŠāđˆāļ‡āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļˆāļēāļ Automatic Mixed Precision (AMP) āļ‚āļ­āļ‡ PyTorch āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđāļšāļšāļœāļŠāļĄāļ„āļ§āļēāļĄāđāļĄāđˆāļ™āļĒāļģ āļ‹āļķāđˆāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļēāļāļšāļ™ GPU āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļš CUDA āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļĒāļąāļ‡āļ„āļ‡āļĢāļąāļāļĐāļēāļ„āļ§āļēāļĄāđāļĄāđˆāļ™āļĒāļģāļŠāļđāļ‡āđ„āļ§āđ‰ āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ F.relu āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāđ‚āļ”āļĒ cuDNN āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāļ–āļķāļ‡āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļšāļ™ GPU

Multi-GPU āđāļĨāļ°āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđāļšāļšāļāļĢāļ°āļˆāļēāļĒāđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļąāļšāļ‚āļ™āļēāļ”

āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ LLM āđāļĨāļ°āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļĄāļĩāļ‚āļ™āļēāļ”āđāļĨāļ°āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡ āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļāđ‡āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āđ€āļŠāđˆāļ™āļāļąāļ™ āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļ™āļĩāđ‰ āļ™āļąāļāļ§āļīāļˆāļąāļĒāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļēāđ„āļ”āđ‰āļŦāļąāļ™āļĄāļēāđƒāļŠāđ‰āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđāļšāļšāļŦāļĨāļēāļĒ GPU āđāļĨāļ°āđāļšāļšāļāļĢāļ°āļˆāļēāļĒ āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļžāļ§āļāđ€āļ‚āļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļžāļĨāļąāļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļĢāļ§āļĄāļ‚āļ­āļ‡ GPU āļŦāļĨāļēāļĒāļ•āļąāļ§āđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĨāļēāļĒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡

CUDA āđāļĨāļ°āđ„āļĨāļšāļĢāļēāļĢāļĩāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡ āđ€āļŠāđˆāļ™ NCCL (NVIDIA Collective Communications Library) āļĄāļ­āļšāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāđāļšāļšāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ–āđˆāļēāļĒāđ‚āļ­āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļāļēāļĢāļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™āļšāļ™ GPU āļŦāļĨāļēāļĒāļ•āļąāļ§ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļāļķāļāļ­āļšāļĢāļĄāđāļšāļšāļāļĢāļ°āļˆāļēāļĒāđƒāļ™āļĢāļ°āļ”āļąāļšāļ—āļĩāđˆāđ„āļĄāđˆāđ€āļ„āļĒāļĄāļĩāļĄāļēāļāđˆāļ­āļ™

</pre>
import torch.distributed as dist

from torch.nn.parallel import DistributedDataParallel as DDP

# Initialize distributed training
dist.init_process_group(backend='nccl', init_method='...')
local_rank = dist.get_rank()
torch.cuda.set_device(local_rank)

# Create model and move to GPU
model = MyModel().cuda()

# Wrap model with DDP
model = DDP(model, device_ids=[local_rank])

# Training loop (distributed)
for epoch in range(num_epochs):
for data in train_loader:
inputs, targets = data
inputs = inputs.cuda(non_blocking=True)
targets = targets.cuda(non_blocking=True)

outputs = model(inputs)
loss = criterion(outputs, targets)

optimizer.zero_grad()
loss.backward()
optimizer.step()

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰ āđ€āļĢāļēāļŠāļēāļ˜āļīāļ•āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđāļšāļšāļāļĢāļ°āļˆāļēāļĒāđ‚āļ”āļĒāđƒāļŠāđ‰āđ‚āļĄāļ”āļđāļĨ DistributedDataParallel (DDP) āļ‚āļ­āļ‡ PyTorch āđ‚āļĄāđ€āļ”āļĨāļ™āļĩāđ‰āļĢāļ§āļĄāļ­āļĒāļđāđˆāđƒāļ™ DDP āļ‹āļķāđˆāļ‡āļˆāļ°āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļ‚āļ™āļēāļ™ āļāļēāļĢāļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒāļāļēāļĢāđ„āļĨāđˆāļĢāļ°āļ”āļąāļšāļŠāļĩ āđāļĨāļ°āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ GPU āļŦāļĨāļēāļĒāļ•āļąāļ§āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ‚āļ”āļĒāđƒāļŠāđ‰ NCCL āđāļ™āļ§āļ—āļēāļ‡āļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĨāļēāļĒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ™āļąāļāļ§āļīāļˆāļąāļĒāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āļāļķāļāļ­āļšāļĢāļĄāđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāđƒāļŦāļāđˆāļ‚āļķāđ‰āļ™āđāļĨāļ°āļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĄāļēāļāļ‚āļķāđ‰āļ™āđƒāļ™āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ

āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ”āđ‰āļ§āļĒ CUDA

āđāļĄāđ‰āļ§āđˆāļē GPU āđāļĨāļ° CUDA āļˆāļ°āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļāļķāļāļāļ™āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāđ€āļ›āđ‡āļ™āļŦāļĨāļąāļ āđāļ•āđˆāļāđ‡āļĒāļąāļ‡āļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āļ•āđˆāļ­āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļĨāļ°āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļĄāļĩāļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĄāļēāļāļ‚āļķāđ‰āļ™āđāļĨāļ°āđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāļĄāļēāļ āļāļēāļĢāđ€āļĢāđˆāļ‡āļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§āļ‚āļ­āļ‡ GPU āļˆāļķāļ‡āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™ āļšāļĢāļĢāļĨāļļāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒāđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļœāļĨāļīāļ•.

TensorRT āļ‚āļ­āļ‡ NVIDIA āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āđāļĨāļ°āļĢāļąāļ™āđ„āļ—āļĄāđŒāļ—āļĩāđˆāļĄāļĩāđƒāļŦāđ‰ āđ€āļ§āļĨāļēāđāļāļ‡āļ•āđˆāļģāđāļĨāļ°āļ›āļĢāļīāļĄāļēāļ“āļ‡āļēāļ™āļŠāļđāļ‡ āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļšāļ™ GPU āļ—āļĩāđˆāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ CUDA TensorRT āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āđ€āļĢāđˆāļ‡āļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§āđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄāđƒāļ™āđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļ āđ€āļŠāđˆāļ™ TensorFlow, PyTorch āđāļĨāļ° MXNet āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļšāļ™āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ•āđˆāļēāļ‡āđ† āļ•āļąāđ‰āļ‡āđāļ•āđˆāļĢāļ°āļšāļšāļāļąāļ‡āļ•āļąāļ§āđ„āļ›āļˆāļ™āļ–āļķāļ‡āļĻāļđāļ™āļĒāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ

import tensorrt as trt

# Load pre-trained model
model = load_model(...)

# Create TensorRT engine
logger = trt.Logger(trt.Logger.INFO)
builder = trt.Builder(logger)
network = builder.create_network()
parser = trt.OnnxParser(network, logger)

# Parse and optimize model
success = parser.parse_from_file(model_path)
engine = builder.build_cuda_engine(network)

# Run inference on GPU
context = engine.create_execution_context()
inputs, outputs, bindings, stream = allocate_buffers(engine)

# Set input data and run inference
set_input_data(inputs, input_data)
context.execute_async_v2(bindings=bindings, stream_handle=stream.ptr)

# Process output
# ...

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰ āđ€āļĢāļēāļŠāļēāļ˜āļīāļ•āļāļēāļĢāđƒāļŠāđ‰ TensorRT āđ€āļžāļ·āđˆāļ­āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļāļķāļāļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāļšāļ™ GPU āļ—āļĩāđˆāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ CUDA āđ‚āļĄāđ€āļ”āļĨāļ™āļĩāđ‰āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ€āļ›āđ‡āļ™āļ„āļĢāļąāđ‰āļ‡āđāļĢāļāđ‚āļ”āļĒ TensorRT āļ‹āļķāđˆāļ‡āļŠāļĢāđ‰āļēāļ‡āļāļĨāđ„āļāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāļ—āļĩāđˆāļŠāļļāļ”āļ‹āļķāđˆāļ‡āļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļāļąāļšāļĢāļļāđˆāļ™āđāļĨāļ°āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāđ€āļ‰āļžāļēāļ° āđ€āļ­āđ‡āļ™āļˆāļīāđ‰āļ™āļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļ—āļģāļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļšāļ™ GPU āđ‚āļ”āļĒāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ CUDA āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļ—āļĩāđˆāļĢāļ§āļ”āđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™

āļŠāļĢāļļāļ›

āļāļēāļĢāļĢāļ§āļĄāļāļąāļ™āļ‚āļ­āļ‡ GPU āđāļĨāļ° CUDA āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđƒāļ™āļāļēāļĢāļ‚āļąāļšāđ€āļ„āļĨāļ·āđˆāļ­āļ™āļ„āļ§āļēāļĄāļāđ‰āļēāļ§āļŦāļ™āđ‰āļēāđƒāļ™āđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒāļ§āļīāļ—āļąāļĻāļ™āđŒ āļāļēāļĢāļĢāļđāđ‰āļˆāļģāđ€āļŠāļĩāļĒāļ‡ āđāļĨāļ°āļ‚āļ­āļšāđ€āļ‚āļ•āļ­āļ·āđˆāļ™āđ† āļ‚āļ­āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļ āļ”āđ‰āļ§āļĒāļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđāļšāļšāļ‚āļ™āļēāļ™āļ‚āļ­āļ‡ GPU āđāļĨāļ°āđ„āļĨāļšāļĢāļēāļĢāļĩāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāđ‚āļ”āļĒ CUDA āļ™āļąāļāļ§āļīāļˆāļąāļĒāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļēāļĄāļēāļĢāļ–āļāļķāļāļ­āļšāļĢāļĄāđāļĨāļ°āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĄāļēāļāļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡

āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļŠāļēāļ‚āļē AI āļĒāļąāļ‡āļ„āļ‡āļžāļąāļ’āļ™āļēāļ•āđˆāļ­āđ„āļ› āļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡ GPU āđāļĨāļ° CUDA āļāđ‡āļˆāļ°āļĄāļĩāđ€āļžāļīāđˆāļĄāļĄāļēāļāļ‚āļķāđ‰āļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āļ”āđ‰āļ§āļĒāļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāđāļĨāļ°āļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™ āđ€āļĢāļēāļ„āļēāļ”āļŦāļ§āļąāļ‡āļ—āļĩāđˆāļˆāļ°āđ€āļŦāđ‡āļ™āļ„āļ§āļēāļĄāļāđ‰āļēāļ§āļŦāļ™āđ‰āļēāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļĢāļ°āļšāļš AI āļ‹āļķāđˆāļ‡āļœāļĨāļąāļāļ”āļąāļ™āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰

āļ‰āļąāļ™āđƒāļŠāđ‰āđ€āļ§āļĨāļēāļŦāđ‰āļēāļ›āļĩāļ—āļĩāđˆāļœāđˆāļēāļ™āļĄāļēāļŦāļĄāļāļĄāļļāđˆāļ™āļ­āļĒāļđāđˆāļāļąāļšāđ‚āļĨāļāđāļŦāđˆāļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļĨāļ°āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ—āļĩāđˆāļ™āđˆāļēāļŠāļ™āđƒāļˆ āļ„āļ§āļēāļĄāļŦāļĨāļ‡āđƒāļŦāļĨāđāļĨāļ°āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļ‚āļ­āļ‡āļ‰āļąāļ™āļ—āļģāđƒāļŦāđ‰āļ‰āļąāļ™āļĄāļĩāļŠāđˆāļ§āļ™āļĢāđˆāļ§āļĄāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ—āļĩāđˆāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļāļ§āđˆāļē 50 āđ‚āļ„āļĢāļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļ™āđ‰āļ™āđ€āļ‰āļžāļēāļ°āļ—āļĩāđˆ AI/ML āļ„āļ§āļēāļĄāļ­āļĒāļēāļāļĢāļđāđ‰āļ­āļĒāļēāļāđ€āļŦāđ‡āļ™āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āļ‚āļ­āļ‡āļ‰āļąāļ™āļĒāļąāļ‡āļ”āļķāļ‡āļ‰āļąāļ™āđ„āļ›āļŠāļđāđˆāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ āļēāļĐāļēāļ˜āļĢāļĢāļĄāļŠāļēāļ•āļī āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŠāļēāļ‚āļēāļ—āļĩāđˆāļ‰āļąāļ™āļāļĢāļ°āļ•āļ·āļ­āļĢāļ·āļ­āļĢāđ‰āļ™āļ—āļĩāđˆāļˆāļ°āļŠāļģāļĢāļ§āļˆāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ