본 포스트에서는 머신러닝 프로젝트에서 사용되는 프로덕션 코드가 어떻게 구성되어야하고 어떤 것들에 주의하는지를 소개하고자 한다. 프로덕션 코드는 실험을 위한 연구용 코드와 달리 사용자에게의 배포를 위한 코드를 일컫는다. 프로덕션 코드는 테스트, 유지보수, 확장성, 성능, 재생산성을 고려하여 작성되어야 한다. 프로덕션 코드와 연구용 코드의 큰 파이프라인은 비슷하다:
- 라이브러리와 데이터를 불러오고,
- 데이터를 훈련/테스트 데이터로 나누고,
- 데이터 정제를 하고,
- 모델 훈련을 하고,
- 모델 평가를 하고,
- 훈련한 모델을 저장하고,
- 테스트 데이터에 대해 예측을 한다.
프로덕션 코드를 어떻게 구조화를 하는가?
1. Convention 선택하기
- 버전 관리(versioning): 버전 관리 시스템을 사용하여 코드 변경 사항 관리하기
- Config 관리: 코드를 여러 가지 환경에서 실행할 수 있도록 설정값 안전하게 보관해두기
- PEP8/linting 도구 사용: 코드의 일관성을 유지하고 실수 줄이기 위함
2. Packaging
프로덕션을 위해서는 필수 파일을 패키징하여 여러 환경에서 코드가 실행될 수 있게 해야한다.
- 패키지를 만들고 설치하는 데 필요한 스크립트 → setup.py
- 패키지에 포함되어야 하는 파일 목록과 메타 데이터 → MANIFEST
3. Software Engineering Best Practices
결국 ml 프로덕션 코드 또한 소프트웨어를 개발하고 유지 관리하는 데 가장 효과적인 방법론을 따라가야 한다.
- 훈련 코드와 예측 코드 분리하기
- 코드의 함수나 메서드가 제대로 작동하는지 확인하는 단위 테스트가 쉽게 작성되도록 하기(testability)
- 각 모듈이나 컴포넌트가 담당하는 특정 기능에만 집중하도록 하기(modularity) ex.데이터 관리와 데이터 검증 분리하기
- SOLID 원칙(객체지향 프로그래밍에서의 주요 원칙들 확인하기)
- 가독성과 유지보수성 → 다른 개발자들이 pull request를 했을 때 바로 실행할 수 있는지 염두에 두기
'Dev Notes > ML' 카테고리의 다른 글
[debug] tokenizer special token 추가 시 임베딩 사이즈 조절 하기 (0) | 2024.07.30 |
---|---|
Deepspeed 배치 사이즈 관련 파라미터 정리 (0) | 2023.08.20 |
C++에서 ONNX runtime 사용하기 (0) | 2023.06.11 |
Torchserve 사용 방법과 경로 설정 (0) | 2023.04.20 |
[MLops 기초] 프로덕션 환경에서의 머신러닝 시스템이란? (0) | 2023.04.18 |