동영상 (실험적 성격)#
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>"
}'
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
input_text = "an apple"
model.text_to_video(input_text)
그림을 영상으로#
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>
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
with open("xxx.jpg", "rb") as f:
prompt = ""
model.image_to_video(image=f.read(), 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>
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
with open("xxx.jpg", "rb") as f1, open("xxx2.jpg", "rb") as f2:
prompt = ""
model.flf_to_video(first_frame=f1.read(), last_frame=f2.read(), 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