Skip to main content

W&B Models 완전 활용 가이드 2: Registry를 이용한 중앙 집중형 자산관리

Created on June 9|Last edited on July 10
인공지능 팀의 규모가 커지고 역할이 다양해질수록, 모델, 데이터, 평가 결과 등 인공지능 실험의 자산을 체계적으로 관리하는 일은 점점 더 중요해집니다. 특히 협업이 잦고 반복적인 실험이 일상화된 환경에서는, 중앙 집중형 자산관리를 통해 자산의 버전 관리, 재사용, 추적 가능성을 확보하는 것이 필수적입니다.
이 게시물에서는 '완전 활용 가이드 1'에 이어, 조직 내 머신러닝 자산 관리 및 워크플로우 혁신의 핵심 도구인 Weights & Biases의 Registry 을 중점적으로 소개합니다. Registry는 다양한 실험 결과물과 모델 버전을 일관되게 관리할 수 있는 구조를 제공하며, 팀 내 모든 구성원이 최신 자산을 신뢰하고 활용할 수 있는 기반을 마련해 줍니다.
참고: 본 가이드를 이해하기 위해 W&B Artifacts에 대한 개념이 선행되어야 합니다. 아직 익숙하지 않으시다면 이 게시물을 먼저 읽어보시는 것을 권장합니다.
💡



자산의 중앙관리를 위한 Registry

Registry 를 통해 최적화된 자산관리를 할 수 있습니다.

  1. 조직내 자산의 중앙 관리
    • Artifact의 버전 관리, 다운로드, 공유 및 공동 관리
    • 실험 결과 재현과 협업 효율성 극대화
  2. 모델 stage management
    • Alias를 이용한 staging, production, 등 다양한 단계로 운영
    • 실험 -> 배포 전환시 명확한 운영 가이드 제공 가능
  3. CI/CD 파이프라인 통합
    • 모델이 특정 스테이지에 도달하면 자동으로 배포
    • Automation을 통한 다운스트림 프로세스 자동화로 실험에서 프로덕션까지 연결
  4. 자산 사용 이력 추적
    • 조직 내 사용자 역할 구분을 통한 사용성 관리
    • 민감한 자산에 대한 접근 통제 가
wandb의 실험은 엔티티 → 프로젝트 → 실행(run) 순으로 구성되어 관리됩니다. 엔티티는 팀 단위를 의미하며, 기본적으로는 개인 전용 엔티티가 생성되지만 팀용 엔티티를 만들어 여러 사람이 같은 프로젝트를 함께 관리할 수 있습니다. 이러한 엔티티가 모여있는 곳을 조직(org)라고 부릅니다. W&B Registry는 조직내에서 artifact 로 저장된 인공지능 자산들을 체계적으로 관리할 수 있도록 구성된 중앙 저장소입니다. 조직내에서 권한을 가진 사용자는 사용자가 속한 팀에 관계없이 모든 artifact의 라이프사이클을 관리할 수 있습니다.
각 조직에는 모델 및 데이터셋 artifact를 구성하는데 사용할 수 있는 Models, Datasets 라는 두 개의 registry 가 초기에 포함되어 있습니다. 조직의 요구 사항에 따라 다른 유형의 registry를 만들 수 있습니다. 각 registry는 하나 이상의 컬렉션으로 구성됩니다. 각 컬렉션은 고유한 작업 또는 유스 케이스를 나타냅니다.


코드에서도 UI상에서도 Registry에 링크할 수 있습니다.

사용자의 다양한 사용환경을 반영하여 registry는 코드를 이용해서도 UI상에서도 모두 링크할 수 있습니다.
다음 예시 코드는 "my_model.txt"라는 모델 artifact를 "first-collection"이라는 컬렉션에 기록하고 '링크'하는 방법을 보여줍니다. 여기서 지정한 컬렉션이 존재하지 않는 경우 자동으로 해당 이름의 컬렉션을 생성합니다. 이 때, 터미널에 출력되는 URL은 W&B가 artifact를 저장하는 프로젝트로 연결됩니다.
import wandb
import random

# 1. W&B run을 초기화합니다.
run = wandb.init(project="registry_quickstart")

# 기록할 수 있도록 시뮬레이션된 모델 파일을 만듭니다.
with open("my_model.txt", "w") as f:
f.write("Model: " + str(random.random()))

# 2. artifact를 W&B에 기록합니다.
logged_artifact = run.log_artifact(
artifact_or_path="./my_model.txt",
name="gemma-finetuned",
type="model" # artifact 유형을 지정합니다.
)

# 3. artifact를 registry에 연결합니다.
REGISTRY_NAME = "model"
COLLECTION_NAME = "first-collection"
run.link_artifact(
artifact=logged_artifact,
target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"
)
“링크"라는 용어는 W&B가 artifact를 저장하는 위치와 registry에서 artifact에 엑세스할 수 있는 위치를 연결하는 포인터를 나타냅니다. W&B는 artifact를 컬렉션에 연결할 때 artifact를 복제하지 않습니다.
💡
3번 `run.link_artifact`를 코드에서 실행하지 않고 UI 상에서 실행할 수 있습니다. 아래 스크린샷과 같이 아티팩트의 페이지에서 'Link to registry' 를 눌러 링크하고자 하는 registry와 collection을 설정하면 손쉽게 연결할 수 있습니다.


W&B Models의 탑 페이지의 왼쪽 사이드바에 있는 Registry를 선택하면 Registry App으로 이동하게 되고, 이 곳에서 위의 과정을 통해 링크한 아티팩트를 확인할 수 있습니다. Artifact를 registry 내의 컬렉션에 연결하면 조직 구성원은 artifact 내용물을 확인하고, 다운로드하고, 관리하고, 이 블로그의 후반부에 말씀드릴 다운스트림 태스크의 자동화를 할 수 있습니다. 이 과정은 적절한 권한관리를 통해 중앙집권화된 자산관리를 가능하게 합니다.


컬렉션의 'Readme'를 작성합니다.


컬렉션에 'human-readable' 한 텍스트를 추가하여 컬렉션의 목적을 이해하는데 도움이 되도록 할 수 있습니다. 마치 Readme.md 처럼 말이죠. W&B는 최소한 다음 정보를 포함할 것을 권장합니다.
  • 요약: 컬렉션의 목적. 실험에 사용된 머신러닝 프레임워크.
  • 라이선스: 인공지능 모델 사용과 관련된 법적 조건 및 권한. 일반적인 라이선스에는 Apache 2.0, MIT 및 GPL등이 있습니다.
  • 참조: 관련 연구 논문, 데이터셋 또는 외부 리소스에 대한 인용 또는 참조.
컬렉션에 학습 데이터가 포함된 경우 다음 추가 정보를 포함하는 것을 고려하세요.
  • 학습 데이터: 사용된 학습 데이터에 대해 설명합니다.
  • 전처리: 학습 데이터셋에서 수행된 전처리
  • 데이터 저장소: 해당 데이터가 저장된 위치 및 엑세스 방법
컬렉션에 모델이 포함된 경우 다음 추가 정보를 포함하는 것을 고려하세요.
  • 아키텍쳐: 모델 아키텍쳐, 레이어 및 특정 설계 선택에 대한 정보
  • 태스크: 모델이 해결하도록 설계된 태스크.
  • Deserialize the model: 팀의 누군가가 모델을 메모리에 로드할 수 있도록 정보를 제공합니다.
  • 배포: 모델이 배포되는 방식 및 위치에 대한 세부 정보와 모델을 워크플로우 오케스트레이션 플랫폼 등 다른 시스템에 통합하는 방법에 대한 정보를 제공합니다.

사용자 정의 레지스트리는 자산 유형에 따른 관리의 유연성과 제어 기능을 제공합니다.

Registry는 기본적으로 Model과 Dataset을 제공하지만 사용자 정의 레지스트리를 만들 수 있습니다. 아래 이미지에서는 사용자가 Fine_Tuned_Models라는 사용자 정의 레지스트리를 생성합니다.
  1. https://wandb.ai/registry/ 의 Registry 앱으로 이동합니다.
  2. Custom registry 내에서 Create registry 버튼을 글릭합니다.
  3. Name 필드에 registry 이름을 입력합니다.
  4. 필요에 따라 registry에 대한 설명을 제공합니다.
  5. Registry visibility 항목에서 registry를 볼 수 있는 사용자를 선택합니다.
  6. Accepted artifacts types 항목에서 All types 또는 Specify types를 선택합니다.
    1. Specify types를 선택한 경우, 해당 registry에 링크할 수 있는 아티팩트의 타입을 하나 이상 추가합니다.
  7. Create registry 버튼을 클릭합니다.
아티팩트 타입은 레지스트리 설정에 저장된 이후에는 제거할 수 없습니다.
💡


Registry 역할 설정을 통해 Viewer, Member, Admin 으로 권한을 관리할 수 있습니다.

  1. Registry 오른쪽 상단 모서리에 있는 톱니바퀴 아이콘을 클릭합니다.
  2. Registry members and roles 섹션으로 스크롤합니다.
  3. Member 필드 내에서 권한을 편집할 user 또는 Team을 검색합니다.
  4. Registry role 열에서 user의 역할을 클릭합니다.
  5. 드롭다운에서 user에게 할당할 역할을 선택합니다.
각 역할에 따른 권한은 아래와 같습니다. 요약하자면:
  • Viewer 는 읽기만 가능합니다.
  • Member 는 읽기, 생성하기, 업데이트하기, 삭제하기가 가능합니다.
  • Admin 은 읽기, 생성학, 업데이트하기, 삭제하기 이외의 유저관리와 관련된 권한이 추가됩니다.
권한카테고리ViewerMemberAdmin
컬렉션의 세부 정보 보기읽기
연결된 아티팩트의 세부 정보 보기읽기
사용량: use_artifact를 사용하여 레지스트리에서 아티팩트 사용읽기
연결된 아티팩트 다운로드읽기
아티팩트의 파일 뷰어에서 파일 다운로드읽기
레지스트리 검색읽기
레지스트리의 설정 및 user 목록 보기읽기
컬렉션에 대한 새 자동화 생성생성
새 버전이 추가될 때 Slack 알림 켜기생성
새 컬렉션 생성생성
새 사용자 지정 레지스트리 생성생성
컬렉션 카드 편집(설명)업데이트
연결된 아티팩트 설명 편집업데이트
컬렉션의 태그 추가 또는 삭제업데이트
연결된 아티팩트에서 에일리어스 추가 또는 삭제업데이트
새 아티팩트 연결업데이트
레지스트리에 허용된 유형 목록 편집업데이트
사용자 지정 레지스트리 이름 편집업데이트
컬렉션 삭제삭제
자동화 삭제삭제
레지스트리에서 아티팩트 연결 해제삭제
레지스트리에 대해 허용된 아티팩트 유형 편집Admin
레지스트리 가시성 변경(Organization 또는 Restricted)Admin
레지스트리에 user 추가Admin
레지스트리에서 user의 역할 할당 또는 변경Admin

Registry에서 user의 권한은 개별적으로 또는 Team 에의해 할당된 권한을 따릅니다. 여기서 만약 팀에 할당한 권한이 더 높을 경우 그 권한을 따르게 됩니다. 예를들어 A팀의 a에게 viewer를 설정한 후, A팀에게 member 권한을 부여한 경우, a는 member 권한을 지니게 됩니다.

MongoDB 스타일 쿼리로 registry 항목을 필터링할 수 있습니다.

wandb.Api().registries() 및 쿼리 predicates를 사용하여 MongoDB 스타일 쿼리를 기반으로 registries, collections 및 artifact versions를 필터링할 수 있습니다.
아래 예시는 세가지 간단한 검색 시나리오를 보여줍니다.
import wandb

# (선택 사항) 가독성을 위해 wandb.Api() 클래스의 인스턴스를 생성합니다.
api = wandb.Api()


# 1. 문자열 `model`을 포함하는 모든 registries를 필터링합니다.
registry_filters = {
"name": {"$regex": "model"}
}
# 필터와 일치하는 모든 registries의 iterable을 반환합니다.
registries = api.registries(filter=registry_filters)

# 2. collection 이름에 문자열 `yolo`를 포함하는 registry에 관계없이 모든 collections을 필터링합니다.
collection_filters = {
"name": {"$regex": "yolo"}
}
# 필터와 일치하는 모든 collections의 iterable을 반환합니다.
collections = api.registries().collections(filter=collection_filters)

# 3. 문자열 `model`을 포함하고 태그 `image-classification` 또는 `latest` 에일리어스를 갖는 모든 artifact versions을 찾습니다.
registry_filters = {
"name": {"$regex": "model"}
}
# 논리적 $or 연산자를 사용하여 artifact versions을 필터링합니다.
version_filters = {
"$or": [
{"tag": "image-classification"},
{"alias": "production"}
]
}
# 필터와 일치하는 모든 artifact versions의 iterable을 반환합니다.
artifacts = api.registries(filter=registry_filters).collections().versions(filter=version_filters)
보다 자세한 내용은 공식 문서를 확인해주세요.

다운스트림 프로세스의 자동화를 위한 Automations

Automations 기능은 Pro 또는 Enterprise 플랜유저만을 위한 특별한 기능입니다. Automation 생성을 통해 registry 에 새로운 아티팩트가 등록될 때, 새로운 alias가 등록될 때, 등 W&B 의 이벤트에 따라 자동 모델 테스트 및 배포와 같은 워크플로우 단계들을 트리거할 수 있습니다. 예를 들어, 새로운 버전이 생성될 때 Slack 채널에 게시하거나, candidate alias가 아티팩트에 추가될 때 모델의 평가를 실행시키도록 webhook을 이용한 트리거를 보내 작업을 자동화할 수 있습니다.
  1. 필요에 따라 엑세스 토큰, 비밀번호 등 민감한 정보를 Team Settings의 secrets에 정의합니다.
  2. W&B가 Slack에 게시하거나 사용자를 대신하여 webhook을 실행할 수 있도록 알림을 구성합니다.
  3. Registry 또는 프로젝트에서 automation을 생성합니다.
자세한 설정방법은 공식 문서를 확인해주세요.
이어서 간단한 사용 시나리오를 설명드리겠습니다.

case1: 새로운 모델을 개발한 후 자동화된 평가를 실행합니다.

  1. Registry에 모델을 관리할 Collection을 생성한 후, automation을 구성합니다.
    • 예시의 automation은 'candidate' 이라는 alias를 붙이면 평가를 수행하는 webhook을 트리거합니다.
      
  2. Sweeps를 이용하여 하이퍼파라미터 튜닝을 수행합니다.
    
  3. 최고 성능을 보인 모델을 해당 컬렉션에 링크 합니다.
    
  4. 이 때, Aliases에 candidate을 작성합니다.
    
  5. 컬렉션에 모델이 추가되었고 이제 automation으로 인해 github action이 수행됩니다.
    

case2: 새로운 평가데이터를 구성한 후 자동화된 평가를 실행합니다.

  1. Registry에 평가 데이터를 관리할 Collection을 생성한 후, automation을 구성합니다.
    
  2. 새로 만든 데이터 아티팩트를 해당 컬렉션에 링크합니다.
    
  3. 컬렉션에 새 데이터가 추가되었고, 평가를 진행하는 github action이 트리거됩니다.
    

case3: 모델 성능 기준 달성 시 자동으로 배포할 수 있습니다. 동시에 Slack 으로 알람을 받도록 합니다!

Automation 기능은 프로 및 엔터프라이즈 플랜의 유저분들만 사용하실 수 있습니다!

Iterate on AI agents and models faster. Try Weights & Biases today.