동영상 (실험적 성격)#

Xinference를 사용하여 동영상을 생성하는 방법 알아보기

소개#

Video API는 비디오와 상호작용하는 방법을 제공합니다:

  • Text-to-video 엔드포인트는 텍스트 프롬프트를 사용하여 처음부터 비디오를 생성합니다.

  • Image-to-video 엔드포인트가 하나의 이미지를 처음부터 비디오로 생성합니다.

  • firstlastframe-to-video 인터페이스는 첫 프레임과 마지막 프레임 간의 전환을 기반으로 비디오를 생성합니다.

API

Endpoint

Text-to-Video API

/v1/video/generations

Image-to-Video API

/v1/video/generations/image

FirstLastFrame-to-Video API

/v1/video/generations/flf

지원되는 모델 목록#

Text-to-video API는 Xinference에서 다음 모델을 지원합니다:

Image-to-video API는 Xinference에서 다음 모델을 지원합니다:

Xinference에서 다음 모델이 firstlastframe-to-video 인터페이스를 지원합니다:

빠른 시작#

Text-to-Video#

cURL 또는 Xinference 방식을 통해 text-to-video API를 사용해 볼 수 있습니다.

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "prompt": "<your prompt>"
  }'

그림을 영상으로#

cURL 또는 Xinference 방식을 통해 image-to-video API를 사용해 볼 수 있습니다.

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/image' \
  -F model=<MODEL_UID> \
  -F image=@xxx.jpg \
  -F prompt=<prompt>

시작 및 종료 프레임에서 비디오 생성#

cURL 또는 Xinference의 Python 클라이언트를 통해 firstlastframe-to-video 인터페이스를 체험할 수 있습니다:

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/video/generations/flf' \
  -F model=<MODEL_UID> \
  -F first_frame=@xxx.jpg \
  -F last_frame=@xxx2.jpg \
  -F prompt=<prompt>

메모리 최적화#

비디오 생성은 많은 VRAM을 차지합니다. 예를 들어, CogVideoX를 실행하면 약 35GB의 VRAM을 사용할 수 있습니다.

Xinference는 비디오 모델의 VRAM 사용을 최적화하기 위해 여러 옵션을 지원합니다.

  • CPU 오프로딩 또는 블록 수준 그룹 오프로딩.

  • 층별 타입 변환 (Layerwise casting).

참고

CPU 오프로드와 블록 레벨 그룹 오프로드는 동시에 활성화할 수 없지만, 계층별 타입 변환은 그중 하나와 함께 사용할 수 있습니다.

CPU 오프로드#

CPU 오프로딩은 모델 가중치를 CPU에 유지하고, 순전파를 실행할 때만 GPU로 로드합니다. VRAM이 극도로 제한된 상황에 적합하지만, 성능에 큰 영향을 미칩니다.

24 GB 미만의 GPU VRAM을 사용할 때는 모델 시작 시 ``–cpu_offload True``를 추가하는 것이 좋습니다. Web UI의 경우 추가 옵션 ``cpu_offload``를 추가하고 값을 ``True``로 설정하세요.

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --cpu_offload True

블록 수준 그룹 언로드#

블록 레벨 그룹 오프로드는 모델의 여러 내부 레이어(예: torch.nn.ModuleList 또는 torch.nn.Sequential)를 그룹화하고, 필요에 따라 추론 과정에서 이러한 그룹을 CPU에서 GPU로 로드합니다. CPU 오프로드와 비교하여 더 많은 메모리를 사용하지만 성능에 미치는 영향은 더 적습니다.

명령줄의 경우 --group_offload True 옵션을 추가하고, Web UI의 경우 ``group_offload``라는 추가 옵션을 추가하고 값을 ``True``로 설정합니다.

CUDA 스트림을 활성화하면 그룹화된 오프로드 추론을 가속화할 수 있습니다. 그러나 CUDA 스트림을 사용하려면 모델 파라미터를 고정 메모리로 이동해야 합니다. 이 할당은 Pytorch가 백그라운드에서 처리하며, CPU RAM 사용량이 크게 증가할 수 있습니다. CPU RAM이 모델 크기의 최소 두 배 이상이라면 이 옵션을 고려하십시오. 명령줄에 ``–use_stream True``를 추가하여 CUDA 스트림을 활성화하고, Web UI의 경우 ``use_stream``이라는 추가 옵션을 추가하고 값을 ``True``로 설정하십시오.

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --group_offload True --use_stream True

층별 타입 변환을 Transformer에 적용합니다.#

층별 형변환은 각 레이어의 가중치를 ``torch.float8_e4m3fn``으로 다운그레이드하고, 레이어 순전파 중에는 일시적으로 ``torch.bfloat16``으로 업그레이드한 후, 이후 다시 ``torch.float8_e4m3fn``으로 복원합니다. 이 방법은 메모리 요구량을 약 50% 줄이지만, 정밀도 절충으로 인해 생성된 비디오의 품질이 약간 저하됩니다. 명령줄에 ``–layerwise_cast True``를 추가하여 층별 형변환을 활성화하고, Web UI의 경우 값이 ``True``인 추가 옵션 ``layerwise_cast``를 추가합니다.

이 예제는 20GB의 비디오 메모리가 필요합니다.

xinference launch --model-name Wan2.1-i2v-14B-480p --model-type video --layerwise_cast True --cpu_offload True