Full Stack Deep Learning — Data Management

이 글은 Full Stack Deep Learning의 세번째 코스인 Data Management를 보고 내용을 정리한 글입니다. 내용의 사진은 모두 발표 슬라이드를 가져왔습니다. 잘못 이해했거나, 의역이나 오타가 있을 수 있습니다. 제보해주시면 감사하겠습니다 🙏

Overview

데이터 관리는 왜 중요할까? 아래 트윗들을 보면

Image for post
Image for post
  • Katherine Scott: 주니어 ML/CV 엔지니어들의 가장 큰 실수 중 하나는 데이터셋 구축에 관심을 갖지 않는 것이다.
  • Mat Kelcey: 최근 ML 프로젝트에서 복잡한 일들은 모델링이나 학습이 아닌 입력 전처리였다.
  • Vicki Boykis: 2019년 데이터사이언티스트로서 가장 많은 시간을 보낸 것은(60% 이상): Cleaning Data/Moving Data

이 분야의 사람들이 데이터 관리에 얼마나 많은 시간을 보내고있는지 알 수 있고. 그만큼 효율적인 데이터관리가 얼마나 중요한지도 알 수 있다.

Sources

학습용 데이터는 어디에서 올까? 많은 ML 앱들은 많은 라벨링된 데이터를 필요로한다. 물론 일부 예외도 있다(GAN, Semi-supervised Learning). 공개 데이터셋은 경쟁에서 이점을 주지는 못한다. 대분의 기업은 많은 돈과 시간을 자신들의 데이터 라벨링에 투자한다.

Image for post
Image for post
구글포토처럼 유저가 직접 라벨링

Data Flywheels은 사용자의 힘을 이용하는게 전체 ML 시스템을 빠르게 개선한다는 걸 의미한다.

Image for post
Image for post

Semi-supervised Learning은 데이터의 일부를 가지고 직접 부분을 라벨링하는 방식이다. 문장에서 일부 단어를 가린 뒤 예측하거나, 이미지의 이웃된 두 부분을 갖고 위치관계를 예측하는 등이다.

Image for post
Image for post

Data Augmentation은 새로운 데이터를 모으지 않고 기존 학습 데이터의 다양성을 증가시키는 방식이다. 비전 모델에는 반드시 해야한다(이미지 회전, 자르기 등). 데이터셋을 CPU 워커에 넣어서 처리하고 GPU로 학습한다. Keras나 fast.ai를 이용해 쉽게 처리할 수 있다. 다른 분야에서는

  • Tabular Data: 일부 셀을 삭제하거나, 사라진 부분을 예상하는값으로 채워넣기
  • Text: 적절한 방법이 없다. 단어를 비슷한 단어로 바꾸거나, 순서를 바꾸는 등이 있다.
  • Speech/Video: 속도를 느리게하거나, 중간에 멈추는 등이 있다.

합성 데이터(Synthetic Data)는 프로그램으로 생성된 데이터이다. 해볼만한 가치가 있지만 과소평가된 아이디어이다.

Image for post
Image for post

데이터에 대해 더 깊게 파볼 수 있다. 예를 들어 영수증 사진의 경우 카메라 플래시나 방향, 위치, 노출 값 등을 신경써야할 수도 있고. 사진의 그림자나 종이의 구겨짐 등도 영향을 줄 수 있다.

Image for post
Image for post

자율주행이나 로봇 분야의 경우 시뮬레이션으로 생성된 데이터를 사용하기도 한다.

Labeling

효과적인 라벨링 방법은 무엇일까? 데이터 라벨링은 이미지, 텍스트, 오디오와 같은 데이터들과, 각 데이터를 모델 학습에 사용될 수 있도록 의미있는 정보로 라벨링해줄 자격을 갖춘 팀이 필요하다. Annotators가 표준적인 피쳐들(경계상자, segmentation 등)을 라벨링을 쉽게 하도록 UI를 만들수도 있고, 크라우드 소싱 등 다른 노동력을 활용할 수도 있고(이 경우 보안 우려가 있음), 서비스를 제공하는 회사와 상담할 수도 있다. 데이터 라벨링은 별도의 소프트웨어 스택, 임시 노동력, 품질 보증을 필요로 하기 때문에 아웃소싱하는 것이 타당하다.

Image for post
Image for post
좌측 사진의 빨간 라벨링처럼 잘못된 라벨링을 하지 않는게 중요하다.

며칠을 바쳐서 최적의 아웃소싱 기업을 골라라

  1. 직접 라벨링해보면서 gold standard를 만들어보고
  2. 여러 경쟁업체에게 샘플 데이터를 맡겨보고
  3. 나의 gold standard와 가장 잘 맞는 업체를 고르면 된다.

업체로는

  • FigureEight
  • LabelBox
  • SUPERVISELY

등이 있다. 이런 풀서비스는 비싸니까 직접 라벨링 소프트웨어를 통해 라벨링하는 방법이 있다

Image for post
Image for post
Prodigy

결론은

  • 아웃소싱이 가능하면 해라
  • 안되면 최소한 소프트웨어를 사용해라
  • 크라우드소싱보단 파트타임 고용을 하는게 더 이치에 맞는다.

Storage

데이터를 적절하게 저장하는 방법은 뭘까? AI에 대한 데이터 저장소 요구사항은 앱과 소스 소재에 따라 매우 다양하다.

  • 파일시스템은 저장소의 기본이다. 파일단위로 저장하고 텍스트이거나 바이너리이다. 버전관리가 안되고, 쉽게 덮어쓸 수 있다. NFS등 다른 네트워크로 접근할 수도 있다. HDFS처럼 분산될수도 있다. 빠르게 접근할 수는 있어도 병렬적을 접근할 수는 없다.
  • 오브젝트 스토리지는 파일 시스템을 통한 API로, 사용자가 실제로 저장된 위치에 구애받지 않고 서비스에 대한 명령어(GET, PUT, DELETE)를 사용할 수 있다. 그것의 기본 단위는 “객체”이다. — 일반적으로 이진 파일(음반, 사운드 파일…). 서비스에 따라 버전관리와 여러 장소에 여분저장이 가능하다. 병렬접근도 되지만 빠르진 않다.
  • 데이터베이스는 구조화된 데이터의의 지속적이고 빠르고, 확장가능한 저장/복구 시스템이다. 기본 단위는 row이다(Unique ID, 다른 row 참조, 컬럼의 값 등). PostgreSQL가 best-in-class(동급 내에서는 최상)의 좋은 선택이다. 비정형 JSON도 잘 지원하고 활발하게 개발중이기도 하다.
  • 데이터 레이크는 여러 소스의 데이터를 비정형적으로 집계하는 것이다(데이터베이스, 로그, 비싼 데이터 변환 등). 모두 덤핑하고 나중에 구체적인 요구에 맞춰 데이터를 변형하는 schema-on-read 개념으로 운영한다. Amazon Redshift같은 서비스가 있다.

무엇이 어디에 저장되야 할까?

  • Binary Data(이미지, 사운드, 압축 텍스트)는 Object로 저장되야한다.
  • 메타데이타(라벨, 유저 활동)은 데이터베이스에 저장되야한다.
  • 데이터베이스에 저장하지 적절치않다면(로그처럼) 데이터레이크에 저장해야한다.
  • 학습할 때는 데이터를 파일시스템에 가져와야한다.

Versioning

데이터 버전 관리는 어떤 다른 단계들이 있을까?

  • Level 0: 버전관리 안함, 그냥 파일시스템이나 S3에 올림. 이경우 배포도 버전관리가 안되고, 모델도 버전관리가 안된다.
  • Level 1: 학습시마다 매 스냅샷을 저장한다.
  • Level 2: asset과 코드의 조합으로 데이터를 버전 관리. 예를 들어 큰 파일은 S3에 저장하고, 작은 학습 데이터는 JSON으로 만들고, 관련 데이터와 함께 저장. git-lfs를 쓰면 큰 json파일도 쉽게 저장가능하다.
  • Level 3: 데이터 저장에 특화된 솔루션을 쓰기 — 정말 이게 프로젝트에 도움이 든다고 확신할 수 있다면 사용. DVC, Pachyderm, Dolt 같은 솔루션 존재

Processing

어떤 방법으로 데이터를 효과적으로 프로세싱할 수 있을까? 가장 간단한 방법은 Makefile로 작업간 의존성을 명시하는 것이다. 워크플로우 관리 시스템이 필요하다면, 현재로썬 Airflow가 가장 좋다. 프로세싱 파이프라인에 간단함을 유지하고 오버엔지니어링하지 않도록 조심해야한다.

예를 들어 하둡으로 70분이 걸리는 일을 커맨드라인으로는 70초만에 해결할 수 있다. unix는 강력한 병렬처리 기능을 갖고있다. 더 최적화한다면 18초만에도 가능하다.

과거 엑셀로 라벨링하던 내자신의 모습이 떠오른다. 그리고 데이터 처리도 jupyter로 했는데 커맨드라인을 잘 활용한다면 저거로도 가능하겠구나, 또 Makefile로도 프로세싱 파이프라인을 잘 만들수 있겠구나 싶었다.

버전 관리는 다른 솔루션을 쓰기보다는 Git-LFS에 대해 배워보는게 더 도움이 될 것 같다. 돈없 ㅠ

Written by

2020.12.8 ~ 2022.6.9 군복무중 Serving in the South Korean Military Service

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store