AMD GPU와 함께 Keras 및 Tensorflow 사용

블로그

AMD GPU와 함께 Keras 및 Tensorflow 사용

AMD는 ROCm이라는 새로운 HPC 플랫폼을 개발 중입니다. 그 야망은 Nvidia(CUDA 사용) 및 AMD GPU( 추가 정보 ).

이 튜토리얼에서는 단일 또는 다중 구성에서 AMD GPU를 사용하여 신경망 환경을 설정하는 방법을 설명합니다.

소프트웨어 측면에서: Docker를 사용하여 ROCm 커널 위에 있는 Keras에 대한 백엔드로 Tensorflow v1.12.0을 실행할 수 있습니다.

이미지제목입니다

ROCm을 설치 및 배포하려면 특정 하드웨어/소프트웨어 구성이 필요합니다.

하드웨어 요구 사항

공식 문서(ROCm v2.1)는 다음을 제안합니다. 하드웨어 솔루션 .

지원되는 CPU

PCIe Gen3 + PCIe Atomics를 지원하는 현재 CPU는 다음과 같습니다.

  • AMD 라이젠 CPU;
  • AMD Ryzen APU의 CPU;
  • AMD Ryzen Threadripper CPU
  • AMD EPYC CPU;
  • Intel Xeon E7 v3 또는 최신 CPU;
  • Intel Xeon E5 v3 또는 최신 CPU;
  • Intel Xeon E3 v3 또는 최신 CPU;
  • Intel Core i7 v4(i7–4xxx), Core i5 v4(i5–4xxx), Core i3 v4(i3–4xxx) 또는 최신 CPU(예: Haswell 제품군 이상).
  • 일부 Ivy Bridge-E 시스템

지원되는 GPU

ROCm은 다음 칩을 사용하는 AMD GPU를 공식적으로 지원합니다.

  • GFX8 GPU
  • AMD Radeon R9 Fury X 및 Radeon Instinct MI8과 같은 피지 칩
  • AMD Radeon RX 480/580 및 Radeon Instinct MI6과 같은 Polaris 10 칩
  • AMD Radeon RX 470/570 및 Radeon Pro WX 4100과 같은 Polaris 11 칩
  • AMD Radeon RX 550 및 Radeon RX 540과 같은 Polaris 12 칩
  • GFX9 GPU
  • AMD Radeon RX Vega 64 및 Radeon Instinct MI25와 같은 Vega 10 칩
  • Vega 7nm 칩(Radeon Instinct MI50, Radeon VII)

소프트웨어 요구 사항

소프트웨어 측면에서 ROCm(v2.1)의 현재 버전은 Linux 기반 시스템에서만 지원됩니다.

ROCm 2.1.x 플랫폼은 다음 운영 체제를 지원합니다.

Ubuntu 16.04.x ​​및 18.04.x(버전 16.04.3 이상 또는 커널 4.13 이상)

CentOS 7.4, 7.5 및 7.6(devtoolset-7 런타임 지원 사용)

RHEL 7.4, 7.5 및 7.6(devtoolset-7 런타임 지원 사용)

테스트 설정

작성자는 환경을 테스트하고 검증하기 위해 다음 하드웨어/소프트웨어 구성을 사용했습니다.

하드웨어

  • CPU: 인텔 제온 E5–2630L
  • RAM: 2 x 8GB
  • 마더보드: MSI X99A Krait Edition
  • GPU: 2 x RX480 8GB + 1 x RX580 4GB
  • SSD: 삼성 850 에보(256GB)
  • HDD: WDC 1TB

소프트웨어

  • OS: 우분투 18.04 LTS

ROCm 설치

모든 것이 제대로 작동하도록 하려면 새로 설치된 운영 체제 내에서 설치 프로세스를 시작하는 것이 좋습니다. NS 다음 단계 Ubuntu 18.04 LTS 운영 체제를 나타냅니다. 다른 OS의 경우 공식 문서 .

첫 번째 단계는 ROCm 커널과 종속성을 설치하는 것입니다.

시스템 업데이트

새 터미널 열기 |_+_|

CTRL + ALT + T

ROCm apt 저장소 추가

관련 리포지토리를 추가하려면 ROCm 스택을 다운로드하고 설치해야 합니다.

sudo apt update sudo apt dist-upgrade sudo apt install libnuma-dev sudo reboot

ROCm 설치

이제 apt 저장소 목록을 업데이트하고 설치해야 합니다 |_+_| 메타 패키지:

wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add - echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list

권한 설정

공식 문서는 새로운 |_+_| 생성을 제안합니다. 현재 사용자를 사용하여 GPU 리소스에 액세스하기 위해 그룹을 만듭니다.

먼저 다음을 실행하여 시스템의 그룹을 확인하십시오.

rocm-dkms

그런 다음 비디오 그룹에 자신을 추가합니다.

sudo apt update sudo apt install rocm-dkms

시스템에 추가하는 향후 사용자가 기본적으로 비디오 그룹에 포함되도록 할 수 있습니다. 그렇게 하려면 다음 명령을 실행할 수 있습니다.

video

그런 다음 시스템을 재부팅합니다.

groups

ROCm 스택 테스트

이제 다음 명령을 실행하여 ROCm 설치를 테스트하는 것이 좋습니다.

새 터미널 열기 |_+_| , 다음 명령을 실행합니다.

sudo usermod -a -G video $LOGNAME

출력은 다음과 같아야 합니다. 링크

그런 다음 발행을 다시 확인하십시오.

echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.conf echo 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf

출력은 다음과 같아야 합니다. 링크

공식 문서는 마침내 ROCm 바이너리를 PATH에 추가하도록 제안합니다.

reboot

축하합니다! ROCm이 시스템에 제대로 설치되고 다음 명령이 실행됩니다.

CTRL + ALT + T

하드웨어 정보 및 통계를 표시해야 합니다.

이미지제목입니다
rocm-smi 명령 출력

텐서플로 도커

ROCm + Tensorflow 백엔드가 작동하도록 하는 가장 빠르고 안정적인 방법은 AMD 개발자가 제공하는 도커 이미지를 사용하는 것입니다.

도커 CE 설치

먼저 Docker를 설치하기 위해 필요합니다. 그렇게 하려면 Ubuntu 시스템에 대한 지침을 따르십시오.

도커 엔진 가져오기

: 삽입을 피하기 위해 |_+_| 대신 |_+_| 루트가 아닌 사용자에게 액세스 권한을 제공하는 것이 유용합니다. 루트가 아닌 사용자로 Docker 관리 .

ROCm Tensorflow 이미지 가져오기

이제 뽑을 시간입니다 텐서플로 도커 AMD 개발자가 제공합니다.

새 터미널 열기 |_+_| 및 문제:

/opt/rocm/bin/rocminfo

몇 분 후 이미지가 시스템에 설치되어 사용할 준비가 됩니다.

영구 공간 만들기

Docker 컨테이너의 임시 특성으로 인해 Docker 세션이 닫히면 저장된 모든 수정 사항과 파일이 컨테이너와 함께 삭제됩니다.

이러한 이유로 파일 및 Jupyter 노트북을 저장하기 위해 물리적 드라이브에 영구 공간을 만드는 것이 유용합니다. 더 간단한 방법은 도커 컨테이너로 초기화할 폴더를 만드는 것입니다. 그렇게 하려면 다음 명령을 실행하십시오.

/opt/rocm/opencl/bin/x86_64/clinfo

이 명령은 |__+_|라는 폴더를 생성합니다. 도커 내에서 생성된 데이터를 저장하고 검토하는 데 유용합니다.

도커 시작

이제 새 컨테이너 세션에서 이미지를 실행합니다. 다음 명령을 보내기만 하면 됩니다.

echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64' | sudo tee -a /etc/profile.d/rocm.sh

도커가 디렉토리에서 실행 중입니다 |_+_| 다음과 유사한 내용이 표시되어야 합니다.

이미지제목입니다

이는 현재 Tensorflow-ROCm 가상 시스템 내에서 작업하고 있음을 의미합니다.

주피터 설치

Jupyter는 신경망의 개발, 디버그 및 테스트에 매우 유용한 도구입니다. 불행히도 현재 기본적으로 ROCm 팀에서 게시한 Tensorflow-ROCm, Docker 이미지에 설치되어 있지 않습니다. 따라서 Jupyter를 수동으로 설치해야 합니다.

그렇게 하려면 Tensorflow-ROCm 가상 시스템 프롬프트 내에서,

1. 다음 명령을 실행합니다.

rocm-smi

Jupyter 패키지를 가상 시스템에 설치합니다. 이 터미널을 열어 두십시오.

2. 새 터미널 열기 |_+_| .

|_+_| 찾기 명령 실행:

sudo docker

다음과 유사한 테이블이 표시되어야 합니다.

이미지제목입니다
왼쪽의 컨테이너 ID

첫 번째 열은 다음을 나타냅니다. 컨테이너 ID 실행된 컨테이너의 다음 단계에 필요하기 때문에 복사합니다.

3. 할 시간이다 저 지르다 , 이미지의 수정 사항을 영구적으로 기록합니다. 동일한 터미널에서 다음을 실행합니다.

docker

어디 |_+_| 값은 임의의 이름입니다(예: |_+_|). .

4. 이미지가 올바르게 생성되었는지 다시 확인하려면 동일한 터미널에서 다음 명령을 실행하십시오.

CTRL + ALT + T

결과적으로 다음과 유사한 테이블이 생성됩니다.

이미지제목입니다

튜토리얼의 나머지 부분에서 새로 생성된 이미지를 참조한다는 점에 유의하는 것이 중요합니다.

새로운 |_+_| 사용할 명령은 다음과 같습니다.

docker pull rocm/tensorflow

다시 한 번, |_+_| 값은 임의적입니다(예: |_+_|). .

Jupyter 노트북 환경 진입

드디어 Jupyter 환경에 들어갈 수 있습니다. 그 안에서 Tensorflow v1.12를 백엔드로, Keras를 프론트엔드로 사용하여 첫 번째 신경망을 만들 것입니다.

청소

먼저 이전에 실행 중인 모든 Docker 컨테이너를 닫습니다.

  1. 이미 열려 있는 컨테이너를 확인합니다.
mkdir /home/$LOGNAME/tf_docker_share

2. 모든 Docker 컨테이너/컨테이너를 닫습니다.

tf_docker_share

3. 이미 열려 있는 모든 터미널을 닫습니다.

주피터 실행

새 터미널을 열자 |_+_| :

  1. 새 Docker 컨테이너를 실행합니다(|_+_| 태그가 기본적으로 사용됨):
docker run -i -t --network=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --workdir=/tf_docker_share -v $HOME/tf_docker_share:/tf_docker_share rocm/tensorflow:latest /bin/bash

Tensorflow-ROCm 도커 컨테이너 프롬프트에 로그인해야 합니다.

이미지제목입니다

도커 컨테이너에 로그인

2. Jupyter 노트북을 실행합니다.

/tf_docker_share

다음과 유사한 새 브라우저 창이 나타납니다.

이미지제목입니다
주피터 루트 디렉토리

새 탭이 자동으로 나타나지 않으면 브라우저에서 |_+_| 명령이 실행되었습니다. 맨 아래에 따라갈 수 있는 링크가 있으며(누르면: |_+_|) 브라우저의 새 탭에서 Jupyter 루트 디렉터리로 리디렉션됩니다.

이미지제목입니다
일반적인 Jupyter 노트북 출력. 예제 링크는 하단에 있습니다

Keras로 신경망 훈련

이 튜토리얼의 마지막 섹션에서 우리는 간단한 신경망을 훈련할 것입니다. MNIST 데이터세트 . 먼저 완전히 연결된 신경망을 구축합니다.

완전히 연결된 신경망

선택하여 새 노트북을 만들어 보겠습니다. 파이썬3 Jupyter 루트 디렉터리의 오른쪽 상단 메뉴에서

Jupyter 탐색기의 오른쪽 상단 메뉴

Jupyter 탐색기의 오른쪽 상단 메뉴

새 Jupiter 노트북이 새 브라우저 탭에 팝업되어야 합니다. 이름 바꾸기|_+_| 클릭하여 |_+_| 창의 왼쪽 상단 모서리에 있습니다.

이미지제목입니다

노트북 이름 바꾸기

Tensorflow 백엔드를 확인합시다. 첫 번째 셀 삽입에서:

pip3 install jupyter

그런 다음 |_+_|를 누르세요. 실행하다. 출력은 다음과 같아야 합니다.

이미지제목입니다
텐서플로우 V1.12.0

우리는 Tensorflow v1.12.0을 사용하고 있습니다.

다음에 사용하기 위해 몇 가지 유용한 기능을 가져와 보겠습니다.

CTRL + ALT + T

배치 크기, 에포크 및 클래스 수를 설정해 보겠습니다.

CONTAINER ID

이제 입력을 다운로드하고 사전 처리하여 시스템 메모리에 로드합니다.

docker ps

신경망 아키텍처를 정의할 때입니다.

docker commit rocm/tensorflow:

계층당 512개의 뉴런이 있는 매우 간단한 2계층 완전 연결 네트워크를 사용합니다. 또한 과적합을 방지하기 위해 뉴런 연결에서 20% 드롭 확률이 포함됩니다.

네트워크 아키텍처에 대한 몇 가지 통찰력을 인쇄해 보겠습니다.

tag

이미지제목입니다
네트워크 아키텍처

문제의 단순성에도 불구하고 훈련할 상당한 수의 매개변수(거의 ~700.000)가 있으며 이는 상당한 계산 전력 소비를 의미합니다. Convolutional Neural Networks는 계산 복잡성을 줄이는 문제를 해결할 것입니다.

이제 모델을 컴파일합니다.

personal

그리고 훈련 시작:

docker images

이미지제목입니다
교육 과정

자유형 com/활성화

신경망은 47us/step으로 단일 RX 480에서 훈련되었습니다. 비교를 위해 Nvidia Tesla K80은 43us/step에 도달하지만 10배 더 비쌉니다.

다중 GPU 교육

추가 단계로 시스템에 여러 GPU가 있는 경우 Keras 기능을 활용하여 교육 시간을 줄이고 배치를 여러 GPU로 분할할 수 있습니다.

그렇게 하려면 먼저 환경 변수를 선언하고 학습에 사용할 GPU 수를 지정해야 합니다(단일 셀에 다음 명령을 입력하고 실행).

docker run

0에서 ...까지의 숫자는 훈련에 사용할 GPU를 정의합니다. 단순히 GPU 가속을 비활성화하려는 경우:

docker run -i -t --network=host --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --workdir=/tf_docker_share -v $HOME/tf_docker_share:/tf_docker_share rocm/tensorflow: /bin/bash

|_+_|도 추가해야 합니다. 기능.

예를 들어 3개의 GPU가 있는 경우 이전 코드는 그에 따라 수정 .

결론

이것으로 이 튜토리얼을 마칩니다. 다음 단계는 MNIST 데이터 세트에서 Convolutional Neural Network를 테스트하는 것입니다. 단일 GPU와 다중 GPU의 성능 비교.

여기서 중요한 것은 AMD GPU가 훨씬 저렴한 가격으로 계산 부하에서 상당히 잘 수행된다는 것입니다. GPU 시장은 빠르게 변화하고 있으며 ROCm은 연구원, 엔지니어 및 신생 기업에게 채택할 수 있는 매우 강력한 오픈 소스 도구를 제공하여 하드웨어 장비의 초기 비용을 낮춥니다.

#텐서플로 #케라스