개발/AI

[AI] 허깅페이스 디퓨저 개발을 위한 우분투와 CUDA 환경 설치

Woogie2 2023. 12. 29. 16:58
반응형

최근 회사에서 허깅페이스 디퓨저를 많이 활용하고 있습니다. 허깅페이스의 디퓨저란 스테이블 디퓨전을 webui로 사용하지 않고, 파이프라인 형식으로 조립할 수 있는 오픈소스 라이브러리인데요. sdxl, sd1.5, sd2.1, sdxl-turbo 등의 새로운 기술을 손쉽게 코드 몇 줄로 사용할 수 있게 해주는 아주 편리한 툴(개발자 기준) 입니다.

로컬 우분투 데스크탑에서, 도커 컴포즈를 통하여, 컨테이너 환경내에, CUDA를 이용하는 이미지를 실행하려는게 목표였습니다.

우분투 포맷 및 재설치

우분투 20.04 버전을 쓰던 컴퓨터를 우분투 22.04 버전으로 업데이트하기로 결정하고, 맥북에서 우분투 설치용 USB 이미지를 만들었습니다.

  1. Mac의 디스크 유틸리티를 통해 USB를 포맷한다.(MS DOS, FAT32 형식)
  2. 우분투 설치 페이지로 이동해 이미지를 다운로드한다. 저는 22.04.3 LTS를 다운로드하였습니다.
  3. USB에 iso 형식의 이미지를 부팅이 가능하도록 만들어주어야합니다. Mac에서는 Etcher를 이용하시면 됩니다. 윈도우에서는 Rufus를 사용하면 된다고 합니다.
  4. 이제 준비된 USB를 컴퓨터에 꽂고, 부팅합니다. 그 후, 바이오스에 접근하여, USB로 부팅되도록 합니다.
  5. 이후에는 GUI에 안내하는 바에 따라, 개인 목적에 따라 설치를 따라가시면 됩니다.

우분투 다운로드 페이지

개발 환경 구성하기

크롬, vscode

크롬과 vscode를 설치해주었습니다. 공식 홈페이지에 가시면 .deb 파일을 다운로드 받으실 수 있습니다. 다운로드 받고, 각 소프트웨어의 설치 방법에 따라서 설치합니다.

리눅스 패키지

그리고, CUDA 설치에 필요한 리눅스 패키지들을 설치해줍니다. 우분투 22.04의 파이썬 버전이 3.10이라 저는 python3.10을 다시 설치해주었지만, 업데이트는 일어나지 않은것 같았습니다.

sudo apt-get update && sudo apt-get install -y --no-install-recommends \
    git \
    build-essential \
    python3.10 \
    python3-pip \
    python3.10-dev \
    wget \
    g++ \
    gcc \

쿠다(CUDA) 설치

보통 쿠다 설치 블로그 글을 보면 nvidia 드라이버를 먼저 설치하고, CUDA를 설치합니다. 하지만 CUDA 설치시 runfile을 이용하면, CUDA와 그에 맞는 드라이버 설치를 한 번에 할 수 있습니다.
저는 12.1.1 버전 설치를 진행하였고, 원하시는 버전을 아카이브에서 찾아서 설치하시면 됩니다.

플랫폼을 본인의 PC에 맞게 선택해주세요.

wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run

이 runfile을 실행하면, GUI가 뜨면서 설치가 시작될겁니다. 하지만, 몇가지 오류가 발생할 수 있습니다(저는 두가지 오류를 겪었습니다.). 이를 해결하려면 GPU 리소스를 차지하는 xserver를 비활성화, Nouveau 비활성화 등이 필요합니다.

/etc/modprobe.d/blacklist-nouveau.conf 파일 끝에 Nouveau 비활성화와 관련된 설정을 추가합니다.
아래 명령어를 이용하시면 편리하게 입력하실 수 있어요.

lsmod | grep nouveau

echo "blacklist nouveau" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf

초기 ram 파일 시스템을 업데이트하고, 시스템을 재부팅합니다.

sudo update-initramfs -u
sudo reboot
sudo service lightdm stop // x server 중지 -> GPU 할당 해제
sudo sh cuda_12.1.1_530.30.02_linux.run // runfile 실행

sudo service lightdm start // 설치 완료 이후 x server 재시작

도커 이미지가 아닌 로컬에서 실행하시려면 추가로 cuDNN과 같은 툴을 설치하시면 됩니다.

도커(Docker) 설치

저는 도커 설치 단계에서 시행 착오를 겪었습니다. 도커 데스크탑이 편리하긴 하지만, nvidia-container-toolkit에서 도커 데스크탑은 지원하지 않는다고 합니다. 정확한 이유는 알 수 없지만, 도커 데스크탑이 VM 환경에서 동작하기 때문이 아닐까 추측합니다. 더욱 궁금하신 분은 도커 데스크탑과 도커 엔진의 차이점을 설명해둔 공식 홈페이지의 글을 읽어보세요. 요약하자면, 두 가지를 동시에 설치해도 되지만, 도커 데스크탑을 사용할 때는, port 충돌 오류 등이 발생할 수 있으니, 로컬의 도커 엔진은 끄고 사용하라는 등의 설명이 되어있습니다.

도커-데스크탑 삭제 이후, 패키지 관리자로 다시 도커 엔진 설치를 진행했습니다.

 

이후, 도커 이미지 내에서 GPU 자원을 사용하기 위해 Nvidia Container Toolkit을 설치합니다. 링크를 방문하셔서 각자 OS에 맞게, 진행하시면 됩니다. 저는 Apt로 설치하고, 도커를 사용하도록 환경을 설정 했습니다. 예전의 블로그 글을 보면 nvidia-docker, nvidia-container-runtime, nvidia-docker2 등의 다양한 툴이 있지만, 해당 툴들의 github에 들어가면, Nvidia Container Toolkit을 사용하라고 권장하고 있습니다.

Docker compose 파일 작성하기

version: "3"
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    user: "root"
    runtime: "nvidia"
    env_file:
      - .env
    ports:
      - "****:****"
    restart: always

 

여기서 runtime: "nvidia"를 설정해주셔야 이미지 내부에서 nvidia driver를 인식합니다. 설정하지 않는 경우에 저는 Warning이 발생했습니다.

 

이제, Nvidia에서 제공하는 이미지를 사용하여 도커 파일을 작성합니다.

FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04
...

이후 Nvidia Deep Learning Containers를 이용하여 깔끔하게 이미지를 실행할 수 있었습니다 :)

반응형