콘텐츠로 이동

10.6. 파이프라인 병렬 계획

Backend.AI GO는 단일 노드에 올리기 어려운 대형 MLX 모델을 여러 피어 노드에 파이프라인 병렬 방식으로 분산시킬 수 있습니다. 계획 단계에서는 선택한 노드 조합을 구체적인 클러스터 계획으로 변환합니다. 각 노드가 담당할 레이어 수, 노드별 메모리 적합성, 그리고 노드 간 통신에 사용될 포트를 미리 확인할 수 있습니다. 계획 단계에서는 서버를 실행하지 않습니다.

현재 상태: 계획(이 페이지)은 미리보기 단계입니다. 모델 준비, 실행, 모니터링, 중지까지 전 과정을 보려면 파이프라인 서빙을 참고하세요.

파이프라인 병렬이 필요한 경우

파이프라인 병렬은 단일 노드에 모델이 들어가지 않을 때 사용합니다. 모델이 하나의 노드에 맞는 경우, 플래너는 오류를 표시하고 해당 노드에서 직접 로드하도록 안내합니다.

요건:

  • 등록된 피어 노드 2개 이상 (수동 등록 또는 자동 발견 참고)
  • 모든 노드의 mlxcel 버전이 동일해야 합니다
  • 모든 노드의 가속기 계열이 동일해야 합니다 (예: 모두 Apple Silicon)
  • 선택한 노드들의 합산 가용 메모리가 모델 가중치 크기보다 커야 합니다

계획 미리보기 열기

  1. 모델 탭에서 분산 서브탭을 선택합니다.
  2. 드롭다운에서 MLX 모델을 선택합니다. 플래너는 DistributedServing 기능 게이트 조건(Apple Silicon, mlxcel 엔진)을 충족하는 모델만 고려합니다.
  3. 노드 목록에서 두 개 이상의 등록된 노드를 선택합니다. 체크박스로 포함/제외를 전환할 수 있습니다.
  4. 선택이 바뀔 때마다 계획이 자동으로 업데이트됩니다.

계획 읽기

계획 미리보기에는 선택한 노드마다 한 행씩 표시됩니다.

의미
노드 등록된 노드 이름
레이어 이 스테이지에 배정된 연속 레이어 범위 (예: 0-15)
메모리 적합성 노드의 가용 메모리 대비 예상 가중치 + KV 비용 막대
경고 노드별 소프트 이슈 (아래 참고)

상단 요약에는 총 스테이지 수, 총 레이어 수, 클러스터가 사용할 --pp-layers 스펙 문자열이 표시됩니다.

오류

플래너가 유효한 계획을 생성하지 못하면 다음 오류 중 하나가 표시됩니다.

오류 원인
이종 가속기 선택한 노드들의 GPU 계열이 다릅니다
mlxcel 버전 불일치 노드들이 서로 다른 mlxcel 버전을 보고합니다
비호환 노드 선택한 노드가 DistributedServing 게이트를 충족하지 않습니다
노드 부족 노드가 2개 미만 선택되었습니다
단일 노드에 적합 모델의 전체 메모리가 하나의 노드에 맞습니다; 직접 로드를 사용하세요
총 메모리 부족 모든 노드의 합산 가용 메모리가 모델 가중치 크기보다 작습니다
레이어 부족 모델의 레이어 수가 선택한 노드 수보다 적습니다; 각 스테이지에는 최소 1개의 레이어가 필요합니다

경고

경고는 유효한 계획 안에 표시됩니다. 계획 자체는 사용할 수 있지만, 실행 전에 각 경고를 검토하세요.

경고 의미
비-Llama 계열 모델 아키텍처가 파이프라인 병렬의 검증 범위 밖입니다; 결과가 다를 수 있습니다
2 스테이지 초과 mlxcel 공식 문서는 1~2 스테이지만 검증되었습니다
노드 메모리 부족 예상 스테이지 메모리가 노드 가용 메모리의 90%를 초과합니다; 런타임에 OOM이 발생할 수 있습니다
모델 미스테이징 해당 노드에 모델 파일이 스테이징되지 않았습니다; 실행 전 분산 탭의 스테이징 버튼으로 선택한 모든 노드에 모델을 스테이징하세요
전송 포트 도달 불가 계획 중 노드의 노드 간 전송 포트에 응답이 없습니다; 실행 전 네트워크 연결성을 확인하세요

네트워크 및 방화벽 요건

파이프라인 클러스터의 각 스테이지 노드에는 전용 노드 간 전송 포트가 필요합니다. 기본적으로 Backend.AI GO는 39600-39629 범위에서 포트를 할당합니다. 이 범위는 설정 > 추론 > 분산 전송 포트 범위에서 변경할 수 있습니다.

클러스터가 정상 동작하려면 계획에 포함된 모든 노드가 서로의 전송 포트에 접근할 수 있어야 합니다. 일반적인 LAN 환경에서는 별도 설정이 필요하지 않습니다. 관리형 네트워크나 서로 다른 서브넷에 노드가 있는 경우:

  • 참여하는 모든 노드 사이에서 TCP 포트 39600-39629 (또는 설정한 범위)를 양방향으로 허용하세요.
  • 코디네이터 노드(첫 번째 스테이지)는 자체 전송 리스너를 위해 같은 풀에서 포트를 하나 더 사용합니다.

계획 중 노드에 전송 포트 경고가 표시되면, 방화벽이 해당 포트를 허용하는지, 다른 노드들이 그 주소로 노드에 접근할 수 있는지 확인하세요.

레이어 분배 알고리즘

플래너는 메모리 비례 최대잉여법을 사용해 모델의 L개 트랜스포머 레이어를 N개 스테이지에 분배합니다.

  1. 각 노드의 가용 메모리 비율을 계산합니다.
  2. 각 비율에 L을 곱해 스테이지별 소수 레이어 수를 구합니다.
  3. 각 스테이지를 floor(소수 레이어 수) 로 초기화합니다.
  4. 잉여 레이어를 소수 부분이 큰 스테이지 순서로 하나씩 배분합니다.
  5. 각 스테이지에 최소 1개의 레이어를 보장합니다.

임베딩 테이블은 첫 번째 스테이지에, 출력 헤드는 마지막 스테이지에 고정됩니다. 이는 mlxcel의 분산 텐서 레이아웃 방식과 일치합니다.

플래너는 모델 브라우저와 동일한 메모리 추정기를 사용합니다 (레이어별 가중치 비용, 임베딩 크기, 스테이지별 KV 캐시). 미리보기에 표시되는 수치가 런타임에서 실제로 시도하는 값과 일치합니다.

전송 포트 범위 변경

설정 > 추론으로 이동한 뒤 분산 전송 포트 시작분산 전송 포트 끝 값을 조정합니다. 범위는 스테이지 수에 코디네이터용 포트 1개를 더한 값 이상이어야 합니다. 변경 사항은 다음 계획 요청부터 반영됩니다.