āđāļāļĢāļ·āđāļāļāļĄāļ·āļ AI 101
āļāļēāļĢāļāļąāđāļāļāđāļēāļāļēāļĢāļāļķāļāļāļāļĢāļĄ āļāļēāļĢāļāļĢāļąāļāđāļāđāļ āđāļĨāļ°āļāļēāļĢāļāļāļļāļĄāļēāļ LLM āļāđāļ§āļĒ NVIDIA GPU āđāļĨāļ° CUDA

āļŠāļēāļāļēāļāļąāļāļāļēāļāļĢāļ°āļāļīāļĐāļāđ (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 āļāļķāđāļāļāļĨāļąāļāļāļąāļāļāļāļāđāļāļāļāļāļāļŠāļīāđāļāļāļĩāđāđāļāđāļāđāļāđāļāđ