With the success of deep learning techniques in a broad range of application domains, many deep learning software frameworks have been developed and are being updated frequently to adapt to new hardware features and software libraries, which bring a big challenge for end users and system administrators. To address this problem, container techniques are widely used to simplify the deployment and management of deep learning software. However, it remains unknown whether container techniques bring any performance penalty to deep learning applications. The purpose of this work is to systematically evaluate the impact of docker container on the performance of deep learning applications. We first benchmark the performance of system components (IO, CPU and GPU) in a docker container and the host system and compare the results to see if there’s any difference. According to our results, we find that computational intensive jobs, either running on CPU or GPU, have small overhead indicating docker containers can be applied to deep learning programs. Then we evaluate the performance of some popular deep learning tools deployed in a docker container and the host system. It turns out that the docker container will not cause noticeable drawbacks while running those deep learning tools. So encapsulating deep learning tool in a container is a feasible solution.
이 논문을 읽어서 무엇을 배울 수 있는지 알려주세요! 🤔
related work:
GPU 게이밍 벤치마크를 돌렸을 때, Docker가 QEMU(가상화 솔루션) 보다 우수해으며, 네이티브 OS와 비슷한 성능을 보였다.
SGEMM(행렬 곱셈과 덧셈 연산을 수행하는 알고리즘)을 실행하여 도커 컨테이너와 가상머신에서 GPU의 성능을 테스트했는데, 도커 컨테이너에서 GPU를 호출해도 오버헤드가 많이 발생하지 않음을 확인함
도커는 VM보다 더 적은 RAM을 사용하면서도 가상 머신보다 더 나은 성능을 제공함
컨테이너의 수가 증가해도 도커는 VM처럼 큰 오버헤드로 인해 컴퓨팅 성능이 급격히 저하되지 않고 성능을 유지할 수 있다.
CPU: 인텔 패러렐 스튜디오 2017 업데이트 2의 인텔 MKL 라이브러리에서 HPL 및 HPCG 벤치마크 실행 => 일반적으로 도커 컨테이너와 호스트 시스템에서 거의 동일하게 수행되며, 차이는 대부분 1% 미만
GPU: CPU<->GPU 간의 데이터 전송 처리량을 테스트, 컨볼루션 연산 수행의 처리량 테스트, 행렬 곱 연산 수행의 처리량 테스트 => 성능 차이가 거의 나타나지 않았다
I/O: dd 및 ioping 도구를 디스크 I/O 성능 테스트
dd if=/dev/zero of=bigfile bs=64k count=16k conv=fdatasync: 다른 여러 파일을 하드 디스크에 순차적으로 쓰고 출력에서 속도 정보를 수집 => 작은 파일에 접근할 때는 도커 컨테이너의 속도가 더 빠른 경향이 있는 반면, 큰 파일에 접근할 때는 호스트 시스템이 약간 더 나은 속도를 보인다.
ioping을 사용하여 캐시 I/O 랜덤 액세스 테스트, 직접 I/O 랜덤 액세스 테스트, I/O 레이턴시 테스트를 포함한 다양한 액세스 유형을 벤치마킹 => PC 플랫폼에서는 큰 성능 차이가 관찰된다. direct I/O & I/O latency 테스트에서 도커 컨테이너가 호스트 시스템보다 매우 빠르다. (도커 컨테이너의 직접 I/O 랜덤 액세스 속도가 디스크 캐시에 액세스하는 것과 거의 동일함)
ioping -c 10 .: io latency
ioping -C -R -w 5 .: cached I/O random access
ioping -D -R -w 5 .: direct I/O random access
데이터를 저장하는 실제 회전 디스크 외에도 진행 중인 프로세스에 자주 사용되는 데이터에 빠르게 액세스할 수 있도록 하드 드라이브에 여러 계층의 NAND 플래시가 설치되어 있다. 도커 컨테이너는 백그라운드에서 실행되는 도커 엔진에 의존하여 빠른 소규모 데이터 액세스 및 IO 요청을 위해 MTC를 활용한다. 이 때문에 ioping 테스트 중에는 하드 드라이브의 실제 디스크에 ioping을 수행하지 않기 때문에 direct IO random access 속도와 IO latency 시간에서 큰 성능 차이가 발생한다.
호스트 시스템이 한 배치의 데이터를 학습하는 데 더 많은 시간이 필요하기 때문에 도커 컨테이너가 호스트 시스템보다 성능이 뛰어나다고 볼 수 있다. 도커 컨테이너에서 첫 번째 epoch의 학습 시간이 호스트보다 훨씬 짧은데, 이후부터는 그 차이가 다시 정상으로 줄어듦 => 첫 번째 epoch에는 도커 컨테이너와 호스트 시스템에서 서로 다른 성능을 갖는 초기 입출력 시간이 포함되지만, 이후에는 입출력 시간이 컴퓨팅 시간에 의해 가려지기 때문(딥 러닝 프레임워크는 학습 과정에서 다음 실행을 위한 데이터를 미리 로드하는 병렬 데이터 로딩을 구현하기 때문에 I/O 시간이 컴퓨팅 시간으로 커버되어 첫 번째 epoch 이후에는 큰 차이를 보이지 않는다)
결론
CPU 또는 GPU에서 실행되는 계산 집약적인 작업은 오버헤드가 적다
도커는 하드 디스크의 NAND 캐시를 더 잘 사용하기 때문에 랜덤 액세스 성능도 개선할 수 있다.
어떤 내용의 논문인가요? 👋
딥 러닝 애플리케이션을 도커 컨테이너 환경에서 실행할 때, 그 영향을 평가하는 연구
Abstract (요약) 🕵🏻♂️
With the success of deep learning techniques in a broad range of application domains, many deep learning software frameworks have been developed and are being updated frequently to adapt to new hardware features and software libraries, which bring a big challenge for end users and system administrators. To address this problem, container techniques are widely used to simplify the deployment and management of deep learning software. However, it remains unknown whether container techniques bring any performance penalty to deep learning applications. The purpose of this work is to systematically evaluate the impact of docker container on the performance of deep learning applications. We first benchmark the performance of system components (IO, CPU and GPU) in a docker container and the host system and compare the results to see if there’s any difference. According to our results, we find that computational intensive jobs, either running on CPU or GPU, have small overhead indicating docker containers can be applied to deep learning programs. Then we evaluate the performance of some popular deep learning tools deployed in a docker container and the host system. It turns out that the docker container will not cause noticeable drawbacks while running those deep learning tools. So encapsulating deep learning tool in a container is a feasible solution.
이 논문을 읽어서 무엇을 배울 수 있는지 알려주세요! 🤔
dd if=/dev/zero of=bigfile bs=64k count=16k conv=fdatasync
: 다른 여러 파일을 하드 디스크에 순차적으로 쓰고 출력에서 속도 정보를 수집 => 작은 파일에 접근할 때는 도커 컨테이너의 속도가 더 빠른 경향이 있는 반면, 큰 파일에 접근할 때는 호스트 시스템이 약간 더 나은 속도를 보인다.ioping -c 10 .
: io latencyioping -C -R -w 5 .
: cached I/O random accessioping -D -R -w 5 .
: direct I/O random access같이 읽어보면 좋을 만한 글이나 이슈가 있을까요?
레퍼런스의 URL을 알려주세요! 🔗
markdown 으로 축약하지 말고, 원본 링크 그대로 그냥 적어주세요!