리포지토리 및 트렁크 기반 개발
많은 데이터 과학자는 Python 또는 R을 사용하여 기계 학습 워크로드를 정의하는 것을 선호합니다. Jupyter Notebook 또는 스크립트를 사용하여 데이터를 준비하거나 모델을 학습시킬 수 있습니다.
소스 제어를 사용하면 코드 자산에 대한 작업이 더 쉬워집니다. 소스 제어는 코드를 관리하고 팀이 코드에 적용할 수 있는 모든 변경 내용을 추적하는 방법입니다.
Azure DevOps 또는 GitHub 같은 DevOps 도구를 사용하는 경우 코드는 소위 리포지토리 또는 리포에 저장됩니다.
리포지토리
MLOps 프레임워크를 설정할 때 기계 학습 엔지니어는 리포지토리를 만들 가능성이 높습니다. Azure DevOps의 Azure Repos를 사용하거나 GitHub 리포지토리를 사용하는 경우에도 둘 다 Git 리포지토리를 사용하여 코드를 저장합니다.
일반적으로 리포지토리의 범위를 지정하는 방법에는 두 가지가 있습니다.
- 단일 리포지토리: 모든 기계 학습 워크로드를 동일한 리포지토리 내에 유지합니다.
- 다중 리포지토리: 각 새 기계 학습 프로젝트에 대해 별도의 리포지토리를 만듭니다.
팀에서 선호하는 접근 방식은 누가 어떤 자산에 액세스해야 하는지에 따라 달라집니다. 모든 코드 자산에 빠르게 액세스하려면 단일 리포지토리가 팀의 요구 사항에 더 적합할 수 있습니다. 사용자가 프로젝트에 적극적으로 작업하는 경우에만 프로젝트에 대한 액세스 권한을 부여하려는 경우 팀은 다중 리포지토리로 작업하는 것을 선호할 수 있습니다. 액세스 제어를 관리하면 오버헤드가 더 많이 발생할 수 있습니다.
리포지토리 구조화
어떤 방법을 사용하든 프로젝트의 표준 최상위 폴더 구조에 동의하는 것이 가장 좋습니다. 예를 들어 모든 리포지토리에 다음 폴더가 있을 수 있습니다.
.cloud
: Azure Machine Learning 작업 영역을 만드는 템플릿과 같은 클라우드 관련 코드를 포함합니다..ad/.github
: 워크플로를 자동화하는 YAML 파이프라인과 같은 Azure DevOps 또는 GitHub 아티팩트가 포함되어 있습니다.src
: 데이터 전처리 또는 모델 학습과 같은 기계 학습 워크로드에 사용되는 코드(Python 또는 R 스크립트)를 포함합니다.docs
: 프로젝트를 설명하는 데 사용되는 Markdown 파일 또는 기타 설명서를 포함합니다.pipelines
: Azure Machine Learning 파이프라인 정의를 포함합니다.tests
: 코드에서 버그 및 문제를 검색하는 데 사용되는 단위 및 통합 테스트를 포함합니다.notebooks
: 주로 실험에 사용되는 Jupyter Notebook을 포함합니다.
참고
학습 데이터는 리포지토리에 포함되지 않아야 합니다. 데이터는 데이터베이스 또는 데이터 레이크에 저장되어야 합니다. Azure Machine Learning 연결 정보를 데이터 저장소로 저장하여 데이터베이스 또는 데이터 레이크에 직접 액세스할 수 있습니다.
각 프로젝트에서 사용하는 표준 구조를 사용하면 데이터 과학자와 다른 협력자가 작업해야 하는 코드를 더 쉽게 찾을 수 있습니다.
팁
데이터 과학 프로젝트를 구조화하기 위한 모범 사례를 참조하세요.
데이터 과학자로서 리포지토리를 사용하는 방법을 알아보려면 트렁크 기반 개발에 대해 알아봅니다.
트렁크 기반 개발
대부분의 소프트웨어 개발 프로젝트는 Azure DevOps 및 GitHub 모두 사용하는 소스 제어 시스템으로 Git을 사용합니다.
Git을 사용할 경우 주요 이점은 코드에서 쉽게 공동 작업하는 동시에 변경된 내용을 추적하는 것입니다. 또한 승인 게이트를 추가하여 검토 및 수락된 변경 내용만 프로덕션 코드에 적용되도록 할 수 있습니다.
위의 작업을 수행하기 위해 Git은 분기를 만들 수 있는 트렁크 기반 개발을 사용합니다.
프로덕션 코드는 주 분기에 호스트됩니다. 누군가가 변경하려고 할 때마다
- 분기를 만들어 프로덕션 코드의 전체 복사본을 만듭니다.
- 만든 분기에서 변경하고 테스트합니다.
- 분기의 변경 내용이 준비되면 다른 사용자에게 변경 내용을 검토하도록 요청할 수 있습니다.
- 변경 내용이 승인된 경우 만든 분기를 기본 리포지토리와 병합하면 변경 내용을 반영하도록 프로덕션 코드가 업데이트됩니다.