Main Content

CPU 및 GPU에서 얕은 신경망 훈련시키기

Parallel Computing Toolbox

이 항목에서는 얕은 신경망을 설명합니다. 딥러닝은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 대신 참조하십시오.

신경망 훈련과 시뮬레이션은 여러 병렬 계산을 포함합니다. 멀티코어 CPU, GPU(그래픽 처리 장치) 및 CPU와 GPU가 다수인 컴퓨터 클러스터는 모두 병렬 처리를 이용할 수 있습니다.

또한 Deep Learning Toolbox™와 Parallel Computing Toolbox™는 단일 컴퓨터의 다수 CPU 코어와 GPU를 사용하여 큰 문제에 대한 훈련과 시뮬레이션 속도를 높일 수 있습니다.

다음은 표준 단일 스레드 훈련과 시뮬레이션 세션입니다. (병렬 처리의 이점은 큰 문제에서 가장 잘 드러나지만, 이 예제에서는 Deep Learning Toolbox와 함께 제공되는 작은 데이터셋을 사용합니다.)

[x, t] = bodyfat_dataset;
net1 = feedforwardnet(10);
net2 = train(net1, x, t);
y = net2(x);

병렬 CPU 워커

Intel® 프로세서에는 최대 8개의 코어가 들어 있습니다. 2개의 프로세서가 장착된 워크스테이션에는 최대 16개 코어가 있을 수 있으며 향후 더 많은 코어가 들어 있을 수 있습니다. 여러 개의 CPU 코어를 병렬로 사용하면 계산 속도가 극히 빨라집니다.

현재 병렬 풀을 시작하거나 가져와서 풀의 워커 수를 확인합니다.

pool = gcp;
pool.NumWorkers

Parallel Computing Toolbox에 대한 라이선스가 없으면 오류가 발생합니다.

병렬 풀이 열려 있을 때 풀 전체에서 훈련과 시뮬레이션을 수행하도록 지정하려면 train 함수의 'useParallel' 옵션을 'yes'로 설정하십시오.

net2 = train(net1,x,t,'useParallel','yes');
y = net2(x,'useParallel','yes');

GPU 연산

GPU는 단일 카드에 수천 개의 코어가 있을 수 있으며 신경망과 같은 병렬 알고리즘에서 매우 효율적입니다.

gpuDeviceCount를 사용하여 지원된 GPU 카드가 여러분의 시스템에서 사용 가능한지 확인하십시오. gpuDevice 함수를 사용하여 현재 선택한 GPU 정보를 검토하거나 다른 GPU를 선택하십시오.

gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available

Parallel Computing Toolbox에 대한 라이선스가 없는 경우 “정의되지 않은 함수 또는 변수” 오류가 나타납니다.

GPU 장치를 선택한 경우, 훈련과 시뮬레이션을 수행하려면 train 또는 sim 함수의 'useGPU' 옵션을 'yes'로 설정하십시오.

net2 = train(net1,x,t,'useGPU','yes');
y = net2(x,'useGPU','yes');

다중 GPU/CPU 연산

더 높은 수준의 병렬 처리를 위해 다중 GPU를 사용할 수 있습니다.

병렬 풀을 연 다음 한 대의 컴퓨터에서 GPU와 CPU 코어를 모두 활용하려면 'useParallel''useGPU'를 모두 'yes'로 설정하십시오. 자신의 고유 GPU와 연결된 각 워커는 그 GPU를 사용합니다. 나머지 워커는 CPU 코어에서 계산을 수행합니다.

net2 = train(net1,x,t,'useParallel','yes','useGPU','yes');
y = net2(x,'useParallel','yes','useGPU','yes');

일부 문제의 경우 GPU와 CPU를 함께 사용하면 계산 속도가 가장 빨라질 수 있습니다. 그 밖의 문제는 CPU가 GPU의 처리 속도를 따라갈 수 없으므로 GPU만 사용하는 것이 더 빠릅니다. 병렬 계산을 고유 GPU가 있는 워커로 제한하려면 'useGPU''only'로 설정하십시오.

net2 = train(net1,x,t,'useParallel','yes','useGPU','only');
y = net2(x,'useParallel','yes','useGPU','only');

MATLAB Parallel Server를 사용한 클러스터 연산

MATLAB® Parallel Server™를 사용하면 여러 대의 컴퓨터를 연결한 신경망 클러스터상에 있는 모든 CPU와 GPU를 활용할 수 있습니다. 클러스터를 활용하려면 클러스터 프로파일이 있는 병렬 풀을 여십시오. MATLAB 환경 영역의 병렬연산 메뉴를 사용하여 프로파일을 관리하고 선택합니다.

병렬 풀을 연 다음 'useParallel''useGPU' 옵션을 사용해 train을 호출하여 신경망을 훈련시키십시오.

net2 = train(net1,x,t,'useParallel','yes');
y = net2(x,'useParallel','yes');

net2 = train(net1,x,t,'useParallel','yes','useGPU','only');
y = net2(x,'useParallel','yes','useGPU','only');

부하 분산과 대규모 문제 처리

Deep Learning Toolbox를 사용한 병렬 연산에 대한 자세한 내용은 병렬 및 GPU 연산을 사용한 얕은 신경망 항목을 참조하십시오. 여기서는 CPU와 GPU 워커에 데이터 세트를 수동으로 분산하여 컴퓨터마다 서로 다른 속도와 메모리를 최대한 활용하는 방법 등을 소개합니다.

수동으로 데이터를 분산하면 워커 데이터를 순차적으로 불러오는 것도 가능하므로 데이터 세트의 크기는 단일 컴퓨터의 RAM 대신 클러스터의 전체 RAM에 의해서만 제한됩니다. 따라서 매우 크고 복잡한 문제에 신경망을 적용하는 것이 가능해집니다.