docker.io를 설치해서 컨테이너를 실행하고 있었는데, 정작 GPU를 사용하지 않고 있었어요.
GPU가 있는데 GPU를 사용하지 않는다?
이거 문제가 있는거죠.
그래서 시작합니다.
EC2에서 GPU 사용하기.
뭔소리야? 싶다면 이전 글의 3번까지 내용 참고
https://velog.io/@sowoncloud/Docker-EC2-%EB%B0%B0%ED%8F%AC
중요한 점은 Ubuntu 24.04가 안된다는 점입니다.
현재 공식적으로 지원하는 버전이 22.04라서 24.04는 대부분의 Nvidia Driver나 CUDA Tool-kit에 호환성 문제가 발생할 수 있다고 합니다.

그래서 다음과 같이 22.04로 AMI를 선택해줍니다.

사실 처음에는 GPT 친구가 추천해준 Deep Learning Base OSS Nvidia Driver GPU AMI를 이용해서 다음 내용을 진행해보았습니다.
하지만 이미 설치되어있는 driver와 cuda 툴킷이 현재 프로젝트와 버전이 맞지않아 어짜피 다시 깔아야 하길래 그냥 22.04 기본버전에서 깔고 시작하겠습니다.
EC2 Console에서 열어서 진행했습니다.
그럼 ssh 접속할 필요도 없어요. 굿.
시작하기 전, 콘솔창에 다음 명령어를 치면 driver가 없다고 뜹니다.
nvidia-smi
sudo apt update
패키지 목록 업데이트 하기
sudo apt install -y ubuntu-drivers-common
Ubuntu,에서 드라이버 관리를 할 수 있게 도와주는 패키지 설치
sudo ubuntu-drivers autoinstall
현재 시스템에 맞는 Nvidia GPU를 설치
nvidia-smi
처음과 같이 없다고 뜬다면, 재부팅하고 다시 쳐보세요.
재부팅방법
1) 인스턴스 관리로 가서 쿨하게 재부팅 누르기
2) sudo reboot 쿨하게 치기
전 쿨하게 1번방법을 주로 사용했습니다.
이후 다시 명령어를 뜨면 다음과 같이 뜹니다.

이건 GPU테스트 때문에 p3.2xlarge로 새로 만들어서 해본거니 그냥 참고로만 봐주세욥.
sudo apt install nvidia-cuda-toolkit
cuda 툴킷 설치해줍니다.
nvcc --version
cuda 컴파일러 버전을 통해 설치 여부를 확인
sudo apt update
시작하기 전 패키지 목록 업데이트 해줍시다.
TIP
지금부터는 코드 작성하기 매우 귀찮습니다.
Linux 내에서 Ctrl Shift V 를 누르시면 복붙이 기가막히게 된답니다?
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Docker 설치를 위한 사전 준비 단계로, 패키지를 설치하고 Docker의 GPG 키를 추가하여 패키지의 무결성을 보장합니다.
띄어쓰기를 기준으로 각 코드를 실행해주시면 됩니다.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
(. /etc/os-release && echo "UBUNTU_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker의 패키지 소스 리스트를 추가하여 Docker 설치를 위한 리포지토리를 설정합니다.
코드가 좀 긴데 한번에 치셔야해요.
sudo apt update
시작 전 쉬어가는 타임으로 패키지 목록 업데이트를 해줍시다.
안해도 될 수도 있는데.. 그냥 매번했어요. 안하는 것 보다는 낫겠죠 뭐.
sudo apt-get install docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin
Docker 엔진과 함게 CLI, 빌드 도구 및 컴포즈 플러그인 까지 설치합니다.
컨테이너 기반의 애플리케이션을 실행하고 관리하기 위함이라고 생각하시면 될 것 같아요.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Nvidia 컨테이너 툴킷 설치를 위해 리포지토리와 GPG 키를 설정합니다.
sudo apt-get install -y nvidia-container-toolkit
nvidia 컨테이너 툴킷 설치합니다.
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ubuntu
newgrp docker
다른 글에서도 작성했던 것 처럼 코드를 작성해줍시다.
근데 제 콘솔창에서는 enable docker는 오류나더라구요..
그치만 큰 문제는 없으니 넘어가셔도 될 듯 합니다. 아니면 치지마세요ㅎ
docker pull {내 ID}/{원하는 이름}
Push했던 Image 다시 pull 해줍시다.
docker images
docker run -d -p {포트번호}:{포트번호} {내 ID}/{원하는 이름}
docker ps
docker logs -f <container_id>
나오고 싶으면 Ctrl C 여러번 눌러보세요.
TIP!
이런식으로 코드를 작성해두면 로그 출력 시 GPU가 사용되고 있는지 확인할 수 있겠죠?# GPU 사용 여부를 확인하고 데이터 타입 설정 if torch.cuda.is_available() and torch.cuda.get_device_capability()[0] >= 7: torch_dtype = torch.bfloat16 print("GPU 사용 가능: bfloat16") else: torch_dtype = torch.float32 print("GPU 사용 불가능 또는 낮은 버전: float32")
docker exec -it <container_id> /bin/bash
이 코드 치시면 컨테이너 내부에서 명령어를 실행할 수 있습니다.
nvidia-smi
본 적 있는 코드죠?
GPU 실행하고 있는지 확인합니다.
초반에 하셨을때처럼 나오는지 확인하세요!
명령어 실행창에서 나오고 싶다면 exit 치세요.
컨테이너 종료는?
FastAPI 프로젝트 Docker + EC2 배포하기 글 후반부를 확인하세요.
아니면 GPT한테 물어봅시다!ㅋ