데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      온프레미스 환경에서 딥러닝 프레임 워크 비교하는 방법

      soeque 19.04.10
      1,088 2 0

      MXNet은 공식 미디엄 블로그(https://medium.com/apache-mxnet/)가 있습니다.

      본 글은 제가 작성한 Post 중 "A Way to Benchmark Your Deep Learning Framework On-premise" 번역본입니다.
      (https://medium.com/apache-mxnet/a-way-to-benchmark-your-deep-learning-framework-on-premise-4f7a0f475726)
       

      [번역] 온프레미스 환경에서 딥러닝 프레임 워크 비교하는 방법


      Why MXNet and Gluon?

      최근 우리 조직에서는 MXNet과 Gluon을 활발히 사용하고 있다. 우리는 DevOps 조직으로서, 새로운 모형을 계속 개발하는 것도 중요하지만 안정적으로 모형을 운영하는 것 역시 중요하다.

      현재 MXNet, TensorFlow, PyTorch, theano 등 수많은 딥러닝 프레임웍이 있다. 수십 혹은 수백개의 모형을 운영하는 입장에서는 많은 프레임웍을 사용하는 것은 부담이다. 따라서 몇 가지 프레임웍을 사용하기 위해서는 선택 기준이 필요하다.

      • 코드 작성의 편리함
      • 양질의 참고할 코드
      • 학습 및 추론 속도
      • 많은 function/method 제공
      • 버전 업데이트 호환성
      • 다양한 언어 지원

      TensorFlow는 양질의 참고할 코드와 튜토리얼이 많지만, Tensorflow’s eager execution이 실험적이기 때문에 디버깅이 어렵다. 반대로 PyTorch의 경우 연구 목적으로 훌륭하나 아직 버전이 안정화되지 않아 업데이트에 따른 코드 관리 이슈가 있다.

      MXNet은 Gluon 등 high-level API 도 제공하면서 low-level control이 가능하다. 이러한 기능들은 실험적인 모형을 빠르게 개발하면서 동시에 운영하는 일에 큰 도움이 된다. 또한, Gluon은 gluon-cv(Computer Vision)와 gluon-nlp(Natural Language Processing)의 파이썬 라이브러리가 나오면서 더욱더 풍부한 기능들을 제공하고 있다.

      MXNet 커뮤니티는 버전 이슈에 대해 API가 호환되도록 엄격히 관리하고 있다.

      Deep Learning Frameworks (source: https://aws.amazon.com/ko/machine-learning/amis/)

      How to evaluate a deep learning framework?

      Benchmark Process의 필요성

      Scenario 1. TensorFlow에서 MXNet으로 변경하였을 경우 좋은 선택이었는지 어떻게 알 수 있을까?

      TensorFlow와 MXNet처럼 서로 다른 딥러닝 프레임웍을 비교할 경우에는 동일한 모형이더라도 구현하는 방식에 따라 정확도 및 속도 차이가 있을 수 있다. 따라서, 정교한 비교를 위해서 keras-mxnet과 같은 동일한 도구 사용을 추천한다. keras-mxnet은 pip으로 쉽게 설치 가능하며 TensorFlow와 MXNet 둘 다 선택이 가능하다.

      Scenario 2. mxnet 1.1.0에서 mxnet 1.2.0으로 업데이트 하였을 경우 좋은 선택이었는지 어떻게 알 수 있을까?

      이 전 버전들과 호환을 이루는 벤치마크 프로세스가 있으면 부수적으로 딥러닝 프레임웍을 버전별로 비교하기가 쉽다. 예를 들어, 특정 모형에 대한 벤치마크 결과를 딥러닝 프레임웍의 버전 정보와 같이 저장해두면 그 차이를 쉽게 비교할 수 있다. 이 때 중요한 것은 벤치마크 지표(metrics)를 잘 정의 하는 것이다.

      Benchmark Process 구성

      어떻게 “on-perm” 환경에서 벤치마크 프로세스를 구성할 것인가? 모든 다른 환경, 프레임웍, 모델, 지표 등을 아래와 같이 구성한다.


      (1) 시스템: CPU, GPU-1, GPU-4
      (2) 프레임웍: TensorFlow, MXNet,
      (3) 모형: resnet50, lstm, 
      (4) 평가지표: 학습속도, 학습정확도, 

      (1) 시스템

      • Docker를 사용하면 동일한 서버에서 CPU와 GPU를 제어하기 쉽다.
      • Docker Images는 Keras에서 제공하는 image(github)를 이용할 수도 있다. 그러나, 이 docker image는 conda 환경인데, 우리의 분석 환경은 native python이기 때문에 native python을 이용할 수 있는 이미지로 구성하였다(github). 
      • (GPU)의 경우 https://github.com/NVIDIA/nvidia-docker를 기반으로 하면 쉽게 만들 수 있다.
      • (CPU) MXNet을 MKL-DNN과 함께 사용하고 싶다면, pip으로 설치할 수 있다.
      pip install mxnet-mkl
      • 분석 환경에서 인터넷이 되지 않을 수 있다. 그렇다면 인터넷이 가능한 곳에서 도커를 빌드하고 이를 파일로 저장 한 후, 분석 환경에서 다시 도커 파일을 로드 할 수 있다.
      (with internet)
      docker build -t bench_gpu:0.0.1 -f bench_gpu/Dockerfile ./
      docker save bench_gpu:0.0.1 > ./bench_gpu.tar
      (분석환경 without internet)
      docker load < ./bench_gpu.tar

      (2) 프레임웍

      • keras-mxnet을 이용하면 TensorFlow와 MXNet을 둘 다 사용할 수 있다. keras 포멧만 지원하기 때문에 프레임웍에 Gluon을 추가하기위해서는 benchmark 코드 형식을 수정해야한다(참고).

      (3,4) 모형 및 평가 지표

      •  keras-mxnet의 benchmark에 사용된 모형을 그대로 이용할 수 있다.(github) 
      • 정확도의 경우 하이퍼파라미터 설정 혹은 웨이트의 초기값 설정에 의해 크게 달라질 수 있기 때문에 학습 속도만 데모로 측정하였다.
      • 만약 추론 속도 및 추론 정확도를 추가하려면 benchmark 코드를 수정해야 한다.

      RUN Benchmark

      아래와 같이 벤치마크 프로세스를 구체화할 수 있다.

      The Architecture of Benchmark Process
      1. 컨테이너를 실행 할 때, 도커 이미지 이름과, GPU 갯수, 딥러닝 프레임웍, 스토리치 위치 등을 지정해준다.
      run_docker(system=gpu, framework=mxnet, store=mystore, )

      2. 컨테이너 내부의 벤치마크 코드를 실행한다.

      run_benchmark(model=resnet50, )

      3. 로그를 이동한다.

      move_result(log)

      (1) 시스템 (2) 프레임웍 (3) 모형에 맞추어 벤치마크 코드를 반복 측정하면 프로세스는 종료된다. 전체 코드는 여기에서 확인 할 수 있다.

      for system in gpu cpu
        for model in resnet50
          for framework in mxnet_1.2.0 tensorflow_1.8.0
              
              run_docker(system, framework, store, )
              run_benchmark(model, )
              move_result(log)

      이 시나리오를 확장하여 특정 모형에 대하여 회귀 테스트를 시행할 수 있다. 이 테스트는 Python과 Python 패키지들의 오류를 디버깅하는데 도움을 준다.
      다양한 버전의 프레임웍에 대한 결과들이 저장되면, 시나리오2(다양한 프레임웍 버전에 대한 이슈)에 대하여 모니터링이 가능하다.

      The Result of Benchmark Process

      위의 코드에서 프레임웍을 TensorFlow와 MXNet 두 가지 경우에 대하여 실행하면 아래의 결과를 얻을 수 있다. kears-mxnet benchmark의 cloud 결과와 동일하게 “on-perm”환경에서도 keras 이용시 resnet50에서 MXNet이 TensorFlow 보다 더 빠른 학습 속도를 보인다. 결과는 여기에서 확인할 수 있다.

      This benchmark was performed at NVIDIA’s DGX-1 Tesla V100
      Training time of ResNet50 between frameworks(5 repeats, 4-GPUs (left) 1-GPU(middle), CPUs(right))
       
       

      Extensions: ADD your model

      주어진 resnet50 외에 자신만의 모형을 등록하는 방법을 소개하고자 한다. keras로 구현된 다른 모형을 벤치마크 프로세스에 넣는 방법은 간단하다. 예시는 간단한 MLP(mult perceptron) 모형이고 이에대한 기본 코드는 tensorflow/benchmark를 참조하였다. 

      먼저 resnet50_benchmark.py형식에 맞게 mnist_mlp_benchmark.py이름으로 코드를 작성한다. 그리고 model_config.py에 해당 모형을 등록해준다.

      Training time of the MLP between frameworks(5 repeats, 4-GPUs (left) 1-GPU(middle), CPUs(right))
       
       

      Summary

      (1) MXNet은 imperative programmingand symbolic programming 두가지 모두 제공한다. 때문에 모형 디버깅도 쉽고 관리도 쉽다. 또한 Python, R, Scala, Julia, C++ 등 다양한 언어를 지원한다.

      (2) 위의 장점과 함께, 실험결과를 보면 MXNet이 학습속도에서 좋은 성과를 보였다.

      (3) Keras-mxnet은 다양한 프레임웍을 빠르게 비교할 수 있는 좋은 도구이다.

      (2) 벤치마크 코드를 작성해두면 프레임웍 간 비교가 가능할 뿐만 아니라 프레임웍 내에서 버전 별로 비교가 가능하다. 

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      soeque 님의 최신 블로그

      더보기
      동영상 기고하기