BLOG

Amazon SageMaker에서 보다 빠른 파이프 모드를 사용하여 모델 교육 가속화하기
작성일: 2018년 10월 8일

이제 Amazon SageMaker는 보다 빠른 파이프 모드를 구현하여 기계 학습 모델을 교육하는 동안 Amazon Simple Storage Service (S3)에서 Amazon SageMaker로 데이터를 스트리밍할 수 있는 속도를 크게 향상시킵니다.

 

파이프 모드는 모델 교육을 시작하기 전에 로컬 Amazon EBS(Elastic Block Store) 볼륨에 데이터를 다운로드하는 파일 모드보다 읽기 처리량이 훨씬 뛰어납니다. 즉, 교육 작업이 더 빨리 시작되고, 더 적은 디스크 공간이 필요하므로 Amazon SageMaker에서 기계 학습 모델을 교육하는 데 드는 전체 비용을 줄일 수 있습니다. 예를 들어, 올해 초 저희는 Amazon SageMaker 내장 알고리즘에 대한 파이프 입력 모드를 출시할 때 내부 벤치마크를 수행했습니다. 78GB 교육 데이터셋에서 시작 시간이 최대 87%까지 단축되었다는 사실을 알게 되었습니다. 또한 일부 벤치마크에서 처리량이 2배 더 빨라 총 교육 시간이 최대 35%까지 단축되었습니다.

 

 

개요

Amazon SageMaker는 교육 데이터 전송을 위한 파일 모드와 파이프 모드라는 두 가지 메커니즘을 지원합니다. 파일 모드에서 교육 데이터는 교육을 시작하기 전에 교육 인스턴스에 연결된 암호화된 EBS 볼륨에 먼저 다운로드됩니다. 그러나 파이프 모드에서는 입력 데이터가 실행되는 동안 교육 알고리즘으로 직접 스트리밍됩니다. 이와 같은 지속적인 데이터 스트리밍은 몇 가지 중요한 이점을 제공합니다. 첫째, 교육 작업의 시작 시간은 입력 데이터의 크기와 무관하게 되어 특히 기가바이트 및 페타바이트 규모의 데이터셋에 대한 교육을 받는 동안 훨씬 빠르게 시작할 수 있습니다. 또한 대규모 데이터셋을 다운로드하기 위해 대량의 디스크 볼륨을 구입하기 위해 비용을 지불할 필요가 없습니다. 마지막으로 교육 알고리즘이 I/O 경계인 경우 Pipe 모드에서 사용하는 높은 동시 처리량의 판독 메커니즘이 모델 교육 속도를 크게 높일 수 있습니다.

 

 

빠른 파이프 모드를 통해 I/O 처리량 향상

파이프 모드의 최신 구현은 전보다 더 높은 데이터 스트리밍 처리량을 제공합니다. 다음 차트는 올해 초에 파이프 모드 지원을 출시할 때보다 파이프 모드의 처리량이 향상된 것을 보여 줍니다. 같은 조건에서 비교하는 경우, 스트리밍 처리량 번호는 Amazon SageMaker 교육에서 지원하는 인스턴스 유형 전체에서 측정된 파일 모드의 값과 기초합니다.

 

 

보시다시피, 파이프 모드를 사용하여 교육 데이터를 스트리밍하는 속도가 이전보다 최대 3배 빨라졌습니다. Amazon SageMaker 내장 알고리즘의 경우 즉시 파이프 모드를 지원할 수 있습니다. 이제 Amazon SageMaker에 사용자 지정 교육 알고리즘을 도입하는 경우 파이프 모드를 활용하는 방법에 대한 예를 살펴보겠습니다.

 

 

파이프 모드 교육 코드 작성

 

파이프 모드에서는 높은 동시성 및 처리량으로 Amazon S3에서 데이터를 미리 추출하여 Unix 이름의 파이프(FIFO로 알려진)로 스트리밍합니다. 시대별로 채널당 하나의 FIFO가 있습니다. 알고리즘은 판독을 위해 FIFO를 열고 <EOF>까지 읽어야 합니다(또는 선택적으로 스트림 중간에 중단함). 완료되면 파일 끝의 설명자를 닫아야 합니다. 그런 다음 선택적으로 다음 시대의 FIFO가 만들어질 때까지 기다린 후 읽기를 시작할 수 있습니다. 알고리즘은 완료 기준을 달성할 때까지 시대를 거듭합니다.

 

이 노트북 예제는 Python에서 매우 간단한 파이프 모드 “훈련” 알고리즘을 구현합니다. 이것은 Amazon SageMaker 교육에 필요한 사양을 준수합니다. 파이프 모드에서 데이터를 읽지만 데이터에는 아무런 영향을 미치지 않습니다. 그냥 읽을 뿐입니다. 이 예는 실제 교육 알고리즘으로 코드를 복잡하게 만들지 않고 파이프 모드를 지원하기 위해 필요한 사항을 정확하게 설명하는 방법으로 작성되었습니다.

 

train.py Python 프로그램에는 코드가 포함되어 있습니다. 다음 코드 조각은 해당 FIFO를 통해 각 시대의 데이터를 읽음으로써 반복됩니다.

 

# We’re allocating a byte array here to read data into; a real algorithm

# may opt to prefetch the data into a memory buffer and train

# in parallel so that both IO and training happen simultaneously

data = bytearray(16777216)

total_read = 0

total_duration = 0

for epoch in range(num_epochs):

    check_termination()

    epoch_bytes_read = 0

    # As per the Amazon SageMaker training spec, the FIFO’s path will be based on

    # the channel name and the current epoch:

    fifo_path = ‘{0}/{1}_{2}’.format(data_dir, channel_name, epoch)

 

    # Usually the FIFO will already exist by the time we get here, but

    # to be safe we should wait to confirm:

    wait_till_fifo_exists(fifo_path)

    with open(fifo_path, ‘rb’, buffering=0) as fifo:

        print(‘opened fifo: %s’ % fifo_path)

        # Now simply iterate reading from the file until EOF. Again, a

        # real algorithm will actually do something with the data

        # rather than simply reading and immediately discarding like we

        # are doing here

        start = time.time()

        bytes_read = fifo.readinto(data)

        total_read += bytes_read

        epoch_bytes_read += bytes_read

        while bytes_read > 0 and not terminated:

            bytes_read = fifo.readinto(data)

            total_read += bytes_read

            epoch_bytes_read += bytes_read

 

        duration = time.time() – start

        total_duration += duration

        epoch_throughput = epoch_bytes_read / duration / 1000000

        print(‘Completed epoch %s; read %s bytes; time: %.2fs, throughput: %.2f MB/s’

              % (epoch, epoch_bytes_read, duration, epoch_throughput))

 

 

파이프 모드 대 파일 모드 사용

 

파이프 모드가 교육에 최적 선택이 아닐 수 있는 몇 가지 상황이 있습니다. 이 경우 파일 모드를 사용해야 합니다.

 

  • 알고리즘이 한 시대 내에 다시 추적하거나 건너뛰어야 하는 경우, 기본 FIFO가 lseek() 작업을 지원할 수 없으므로 파이프 모드에서는 이 작업을 수행할 수 없습니다.
  • 교육 데이터셋이 메모리에 충분히 작고 여러 시대를 실행해야 하는 경우, 이 경우 메모리와 반복을 위해 모든 데이터를 로드하는 것이 더 빠르고 쉬워질 수 있습니다.
  • 교육 데이터셋을 스트리밍 소스에서 구문 분석하기가 쉽지 않은 경우가 해당됩니다.

 

다른 모든 시나리오에서는 I/O 바운드 교육 알고리즘을 사용하는 경우, Pipe 모드로 전환하면 처리량이 대폭 증가하고 필요한 디스크 볼륨 크기가 줄어듭니다. 이를 통해 시간을 절약하고 교육 비용을 절감할 수 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/accelerate-model-training-using-faster-pipe-mode-on-amazon-sagemaker/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.