Docker 컨테이너는 시스템의 GPU를 자동으로 보지 않습니다. 이로 인해 기계 학습 프레임워크와 같은 GPU 종속 워크로드에서 성능이 저하됩니다. 호스트의 NVIDIA GPU를 컨테이너에 노출하는 방법은 다음과 같습니다.
GPU가 Docker에서 작동하도록 만들기
Docker 컨테이너는 호스트의 커널을 공유하지만 자체 운영 체제 및 소프트웨어 패키지를 가져옵니다. 이는 GPU와 인터페이스하는 데 사용되는 NVIDIA 드라이버가 없음을 의미합니다. Docker는 기본적으로 컨테이너에 GPU를 추가하지 않으므로 일반docker run하드웨어가 전혀 표시되지 않습니다.
높은 수준에서 GPU가 작동하도록 하는 것은 이미지 내에 드라이버를 설치한 다음 런타임에 컨테이너에 GPU 장치를 추가하도록 Docker에 지시하는 2단계 절차입니다.
이 가이드는 최신 버전의 CUDA 및 Docker에 중점을 둡니다. NVIDIA Container Toolkit의 최신 릴리스는 CUDA 10 및 Docker Engine 19.03 이상의 조합을 위해 설계되었습니다. CUDA, Docker 및 NVIDIA 드라이버의 이전 빌드에는 추가 단계가 필요할 수 있습니다.
NVIDIA 드라이버 추가
Docker 구성을 계속하기 전에 호스트에서 NVIDIA 드라이버가 제대로 작동하는지 확인하십시오. 성공적으로 실행할 수 있어야 합니다.nvidia-smiGPU의 이름, 드라이버 버전 및 CUDA 버전을 확인하십시오.
광고
GPU를 Docker와 함께 사용하려면 먼저 NVIDIA Container Toolkit을 호스트에 추가하십시오. 이는 Docker 엔진에 통합되어 GPU 지원을 위해 컨테이너를 자동으로 구성합니다.
이제 Container Toolkit이 작동해야 합니다. 테스트 컨테이너를 시작할 준비가 되었습니다.
GPU 액세스로 컨테이너 시작
Docker는 기본적으로 시스템의 GPU를 제공하지 않으므로 다음을 사용하여 컨테이너를 생성해야 합니다.--gpus하드웨어가 표시되도록 플래그를 지정합니다. 활성화하거나 사용할 특정 장치를 지정할 수 있습니다.all예어.
그만큼nvidia/cuda이미지는 CUDA 바이너리 및 GPU 도구로 사전 구성됩니다. 컨테이너를 시작하고nvidia-smiGPU의 액세스 가능 여부를 확인하는 명령입니다. 출력은 사용할 때 본 것과 일치해야 합니다.nvidia-smi당신의 호스트에. CUDA 버전은 호스트 및 선택한 컨테이너 이미지의 툴킷 버전에 따라 다를 수 있습니다.
docker run -it --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi
기본 이미지 선택
중 하나를 사용하여nvidia/cuda태그는 GPU 워크로드를 Docker에서 실행하는 가장 빠르고 쉬운 방법입니다. 다양한 변형을 사용할 수 있습니다. 운영 체제, CUDA 버전 및 NVIDIA 소프트웨어 옵션의 매트릭스를 제공합니다. 이미지는 여러 아키텍처용으로 빌드됩니다.
각 태그의 형식은 다음과 같습니다.
11.4.0-base-ubuntu20.04
11.4.0– CUDA 버전.
base– 이미지 풍미.
ubuntu20.04– 운영 체제 버전.
광고
세 가지 다른 이미지 맛을 사용할 수 있습니다. 그만큼baseimage는 필수 CUDA 런타임 바이너리가 포함된 최소 옵션입니다.runtimeGPU 간 통신을 위한 CUDA 수학 라이브러리 및 NCCL을 포함하는 보다 완전한 기능을 갖춘 옵션입니다. 세 번째 변형은devel그것은 당신에게 모든 것을 제공합니다runtime사용자 정의 CUDA 이미지를 생성하기 위한 헤더 및 개발 도구뿐만 아니라
이미지 중 하나가 효과가 있으면 이를 기반으로 사용하는 것을 목표로 삼으십시오.Dockerfile. 그런 다음 일반 Dockerfile 지침을 사용하여 프로그래밍 언어를 설치하고 소스 코드를 복사하고 애플리케이션을 구성할 수 있습니다. 수동 GPU 설정 단계의 복잡성을 제거합니다.
FROM nvidia/cuda:11.4.0-base-ubuntu20.04
RUN apt update
RUN apt-get install -y python3 python3-pip
RUN pip install tensorflow-gpu
COPY tensor-code.py .
ENTRYPONT ["python3", "tensor-code.py"]
다음을 사용하여 이 이미지를 빌드하고 실행합니다.--gpus플래그는 GPU 가속으로 Tensor 워크로드를 시작합니다.
수동으로 이미지 구성
다른 기반을 선택해야 하는 경우 이미지에 CUDA 지원을 수동으로 추가할 수 있습니다. 이를 달성하는 가장 좋은 방법은 공식 NVIDIA Dockerfile을 참조하는 것입니다.
CUDA 패키지 리포지토리를 추가하는 데 사용된 지침을 복사하고 라이브러리를 설치하고 경로에 연결합니다. CUDA 버전 및 운영 체제에 따라 다르기 때문에 이 가이드의 모든 단계를 재현하지는 않습니다.
Dockerfile 끝에 있는 환경 변수에 주의하십시오. 이는 이미지를 사용하는 컨테이너가 NVIDIA Container Runtime과 통합되는 방식을 정의합니다.
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
광고
CUDA가 설치되고 환경 변수가 설정되면 이미지가 GPU를 감지해야 합니다. 이렇게 하면 이미지 내용을 더 잘 제어할 수 있지만 새 CUDA 버전이 출시되면 지침을 조정할 수 있습니다.
어떻게 작동합니까?
NVIDIA Container Toolkit은 Docker와 같은 컨테이너 런타임을 호스트의 NVIDIA 드라이버에 대한 인터페이스로 래핑하는 패키지 모음입니다. 그만큼libnvidia-container라이브러리는 런타임 래퍼를 통해 시스템의 GPU를 컨테이너에 자동으로 제공하는 API 및 CLI를 제공하는 역할을 합니다.
그만큼nvidia-container-toolkit구성 요소는 컨테이너 런타임을 구현합니다.prestart훅. 즉, 새 컨테이너가 시작되려고 할 때 알림을 받습니다. 연결하려는 GPU를 확인하고 호출합니다.libnvidia-container컨테이너 생성을 처리합니다.
후크는 다음에 의해 활성화됩니다.nvidia-container-runtime. 이는 NVIDIA가 다음을 보장하도록 containerd 또는 runc와 같은 “실제” 컨테이너 런타임을 래핑합니다.prestart후크가 실행됩니다. 기존 런타임은 후크가 실행된 후 컨테이너 시작 프로세스를 계속합니다. 컨테이너 툴킷이 설치되면 Docker 데몬 구성 파일에서 선택한 NVIDIA 런타임이 표시됩니다.
요약
Docker 컨테이너 내에서 NVIDIA GPU를 사용하려면 호스트에 NVIDIA Container Toolkit을 추가해야 합니다. 이것은 NVIDIA 드라이버를 컨테이너 런타임과 통합합니다.
부름docker run와 더불어--gpu플래그는 컨테이너에서 하드웨어를 볼 수 있도록 합니다. Container Toolkit을 설치한 후 실행하는 각 컨테이너에서 설정해야 합니다.
광고
NVIDIA는 애플리케이션의 빠른 시작으로 사용할 수 있는 사전 구성된 CUDA Docker 이미지를 제공합니다. 더 구체적인 것이 필요하면 공식 Dockerfiles를 참조하여 Container Toolkit과 여전히 호환되는 자신만의 것을 조립하십시오.
토큰화(Tokenization):문서를 문장 단위로, 문장을 단어 단위로 쪼개는 것을 말한다. 주로 사용되는 방법으로 N-gram 방법이 있는데 N-gram에 대한 개념은여기를 참고하자.
필터링, 불용어 제거, 철자 수정: 말 그대로 불필요한 단어 즉,텍스트로부터 주요한 정보를 얻는 것에 영향을 미치지 않는 단어들을 제거한다. 영어의 불용어에 대한 예시로는 'he', 'is', 'will' 등이 되겠다.
어근 추출: Stemming이라고도 한다. 또 다른 방법으로는 Lemmatization 방법도 존재하는데, 이 두개 중Lemmatization이 더욱 더 정교한 방법이다. 정교하다란, 예를 들어, classifies 라는 단어의 어근을 추출할 때 Stemming은 단순히 어미를 제거해 classif 라고 어근을 추출하지만 Lemmatization은 classify로 제대로 어근을 추출한다.(물론 classifies를 실제로 수행해본 것은 아니니 Lemmatization이 더욱 더 정교한 방법이라는 주장에 힘을 실어줄 가상의 예시일 뿐이다.)
그런데...어떻게 텍스트 데이터를 숫자형태로 바꾸어서 머신러닝 모델이 알아듣도록 변형하지???? @..@;;;
3) 텍스트를 숫자로 변형해 주는 과정인 피처 벡터화(Feature Vectorizer) 수행