Azure Machine Learning에 대한 Git 통합

Git는 프로젝트를 공유하고 공동 작업할 수 있는 인기 있는 버전 제어 시스템입니다.

Azure Machine Learning은 작업 추적을 위해 Git 리포지토리를 완벽하게 지원합니다. 공유 작업 영역 파일 시스템에 직접 리포지토리를 복제하거나 로컬 워크스테이션에서 Git를 사용하거나 CI/CD 파이프라인에서 Git를 사용할 수 있습니다.

Azure Machine Learning에 작업을 제출할 때 원본 파일이 로컬 git 리포지토리에 저장된 경우 리포지토리에 대한 정보는 학습 프로세스의 일부로 추적됩니다.

Azure Machine Learning은 로컬 git 리포지토리의 정보를 추적하므로 특정 중앙 리포지토리에 연결되지 않습니다. GitHub, GitLab, Bitbucket, Azure DevOps 또는 다른 모든 git 호환 서비스에서 리포지토리를 복제할 수 있습니다.

Visual Studio Code를 사용하여 그래픽 사용자 인터페이스를 통해 Git과 상호 작용합니다. Visual Studio Code를 사용하여 Azure Machine Learning 원격 컴퓨팅 인스턴스에 연결하려면 Azure Machine Learning과 통합된 Visual Studio Code 시작(미리 보기)을 참조하세요.

Visual Studio Code 버전 제어 기능에 대한 자세한 내용은 VS Code에서 버전 제어 사용VS Code에서 GitHub 작업을 참조하세요.

작업 영역 파일 시스템에 Git 리포지토리 복제

Azure Machine Learning은 작업 영역에 있는 모든 사용자에게 공유 파일 시스템을 제공합니다. 이 파일 공유에 Git 리포지토리를 복제하려면 컴퓨팅 인스턴스를 만들고 터미널을 여는 것이 좋습니다. 터미널이 열리면 전체 Git 클라이언트에 액세스할 수 있고 Git CLI 환경을 통해 Git를 복제하고 사용할 수 있습니다.

사용자가 작업 분기에서 직접 충돌하지 않도록 사용자 디렉터리에 리포지토리를 복제하는 것이 좋습니다.

컴퓨팅 인스턴스의 로컬 파일 시스템으로 복제하는 것과 탑재된 파일 시스템(~/cloudfiles/code 디렉터리로 탑재됨)으로 복제하는 것 사이에는 성능 차이가 있습니다. 일반적으로 로컬 파일 시스템에 복제하는 것이 탑재된 파일 시스템보다 성능이 더 좋습니다. 그러나 컴퓨팅 인스턴스를 삭제하고 다시 만들면 로컬 파일 시스템이 손실됩니다. 탑재된 파일 시스템은 컴퓨팅 인스턴스를 삭제하고 다시 만드는 경우 유지됩니다.

인증할 수 있는 Git 리포지토리를 복제할 수 있습니다(GitHub, Azure Repos, BitBucket 등).

복제에 대한 자세한 내용은 Git CLI를 사용하는 방법에 대한 가이드를 참조하세요.

SSH를 사용하여 Git 계정 인증

새 SSH 키 생성

  1. Azure Machine Learning Notebook 탭에서 터미널 창을 엽니다.

  2. 이메일 주소를 대체하여 아래 텍스트를 붙여넣습니다.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

그러면 제공된 이메일을 레이블로 사용하여 새 ssh 키가 생성됩니다.

> Generating public/private rsa key pair.
  1. "키를 저장할 파일을 입력하십시오"라는 메시지가 표시되면 Enter 키를 누릅니다. 이 파일의 기본 위치를 수락합니다.

  2. 기본 위치가 '/home/azureuser/.ssh'인지 확인하고 enter 키를 누릅니다. 그렇지 않은 경우 '/home/azureuser/.ssh' 위치를 지정합니다.

SSH 키가 '/home/azureuser/.ssh'에 저장되어 있는지 확인하세요. 이 파일은 컴퓨팅 인스턴스에 저장되며 컴퓨팅 인스턴스 소유자만 액세스할 수 있습니다.

> Enter a file in which to save the key (/home/azureuser/.ssh/id_rsa): [Press enter]
  1. 프롬프트에 보안 암호를 입력합니다. 보안을 강화하기 위해 SSH 키에 암호를 추가하는 것이 좋습니다.
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

Git 계정에 공개 키 추가

  1. 터미널 창에서 공개 키 파일의 콘텐츠를 복사합니다. 키의 이름을 바꾼 경우 id_rsa.pub를 공개 키 파일 이름으로 바꿉니다.
cat ~/.ssh/id_rsa.pub

터미널에서 복사 및 붙여넣기

  • Windows: 복사하려면 Ctrl-Insert, 붙여넣으려면 Ctrl-Shift-v 또는 Shift-Insert를 사용합니다.
  • Mac OS: Cmd-c: 복사, Cmd-v: 붙여넣기
  • FireFox/IE에서 클립보드 사용 권한을 제대로 지원하지 않을 수 있습니다.
  1. SSH 키 출력을 선택하고 클립보드에 복사합니다.
  2. 다음으로, 기본 설정 계정 유형에 SSH 키를 추가하는 단계를 수행합니다.

SSH를 사용하여 Git 리포지토리 복제

  1. Git 리포지토리에서 SSH Git 복제 URL을 복사합니다.

  2. SSH Git 리포지토리 URL을 사용하려면 아래 git clone 명령에 url을 붙여넣습니다. 이는 다음과 비슷합니다.

git clone git@example.com:GitUser/azureml-example.git
Cloning into 'azureml-example'...

다음과 같은 응답이 표시됩니다.

The authenticity of host 'example.com (192.30.255.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.

SSH는 서버의 SSH 지문을 표시하고 확인하도록 요청할 수 있습니다. 표시된 지문이 SSH 공개 키 페이지의 지문 중 하나와 일치하는지 확인해야 합니다.

SSH는 중간자(man-in-the-middle) 공격으로부터 보호하기 위해 알 수 없는 호스트에 연결할 때 이 지문을 표시합니다. 호스트의 지문을 수락한 후에는 지문이 변경되지 않는 한 SSH에서 다시 묻지 않습니다.

  1. 연결을 계속할지 묻는 메시지가 표시되면 yes를 입력합니다. Git는 리포지토리를 복제하고 나중에 Git 명령에 대해 SSH를 사용하여 연결하도록 원본 원격을 설정합니다.

Git 리포지토리에서 제공되는 코드 추적

Python SDK 또는 Machine Learning CLI에서 학습 작업을 제출하면 모델을 학습하는 데 필요한 파일이 작업 영역에 업로드됩니다. 개발 환경에서 git 명령을 사용할 수 있는 경우 업로드 프로세스에서 이 명령을 사용하여 파일이 git 리포지토리에 저장되었는지 확인합니다. 그렇다면 git 리포지토리의 정보는 학습 작업의 일부로도 업로드됩니다. 이 정보는 학습 작업을 위해 다음 속성에 저장됩니다.

속성 값을 가져오는 데 사용되는 Git 명령 설명
azureml.git.repository_uri git ls-remote --get-url 리포지토리가 복제된 URI입니다.
mlflow.source.git.repoURL git ls-remote --get-url 리포지토리가 복제된 URI입니다.
azureml.git.branch git symbolic-ref --short HEAD 작업을 제출한 활성 분기입니다.
mlflow.source.git.branch git symbolic-ref --short HEAD 작업을 제출한 활성 분기입니다.
azureml.git.commit git rev-parse HEAD 작업을 위해 제출된 코드의 커밋 해시입니다.
mlflow.source.git.commit git rev-parse HEAD 작업을 위해 제출된 코드의 커밋 해시입니다.
azureml.git.dirty git status --porcelain . 분기/커밋이 더티인 경우 True이며, 그렇지 않으면 false입니다.

이 정보는 예측 도구, 기계 학습 파이프라인 또는 스크립트 실행을 사용하는 작업을 위해 전송됩니다.

개발 환경의 git 리포지토리에 학습 파일이 없거나 git 명령을 사용할 수 없는 경우 git 관련 정보는 추적되지 않습니다.

개발 환경에서 git 명령을 사용할 수 있는지 확인하려면 셸 세션, 명령 프롬프트, PowerShell 또는 기타 명령줄 인터페이스를 열고 다음 명령을 입력합니다.

git --version

설치되어 있는 경우 경로에서 git version 2.4.1과 유사한 응답을 받습니다. 개발 환경에 git를 설치하는 방법에 대한 자세한 내용은 git 웹 사이트를 참조하세요.

로깅된 정보 보기

git 정보는 학습 작업을 위한 속성에 저장됩니다. Azure Portal 또는 Python SDK를 사용하여 이 정보를 볼 수 있습니다.

Azure Portal

  1. 스튜디오 포털에서 작업 영역을 선택합니다.
  2. 작업을 선택한 다음, 실험 중 하나를 선택합니다.
  3. 표시 이름 열에서 작업 중 하나를 선택합니다.
  4. 출력 + 로그를 선택한 다음, 로그azureml 항목을 확장합니다. ###_azure로 시작하는 링크를 선택합니다.

로깅된 정보에는 다음 JSON과 유사한 텍스트가 포함됩니다.

"properties": {
    "_azureml.ComputeTargetType": "batchai",
    "ContentSnapshotId": "5ca66406-cbac-4d7d-bc95-f5a51dd3e57e",
    "azureml.git.repository_uri": "git@github.com:azure/machinelearningnotebooks",
    "mlflow.source.git.repoURL": "git@github.com:azure/machinelearningnotebooks",
    "azureml.git.branch": "master",
    "mlflow.source.git.branch": "master",
    "azureml.git.commit": "4d2b93784676893f8e346d5f0b9fb894a9cf0742",
    "mlflow.source.git.commit": "4d2b93784676893f8e346d5f0b9fb894a9cf0742",
    "azureml.git.dirty": "True",
    "AzureML.DerivedImageName": "azureml/azureml_9d3568242c6bfef9631879915768deaf",
    "ProcessInfoFile": "azureml-logs/process_info.json",
    "ProcessStatusFile": "azureml-logs/process_status.json"
}

속성 보기

학습 실행을 제출하면 Job 개체가 반환됩니다. 이 개체의 properties 특성에는 로깅된 git 정보가 포함됩니다. 예를 들어 다음 코드는 커밋 해시를 검색합니다.

적용 대상: Python SDK azure-ai-ml v2(현재)

job.properties["azureml.git.commit"]

다음 단계