47 lines
2.5 KiB
Python
47 lines
2.5 KiB
Python
"""Launch the pinned original API; only deployment/device boundaries are extended."""
|
|
import argparse
|
|
import inspect
|
|
import json
|
|
import logging
|
|
import os
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
def install_device_policy(torch,encoder_class,offload_mode):
|
|
"""Keep native encoding on CUDA1, transfer conditioning to pipeline's CUDA0."""
|
|
original_init=encoder_class.__init__;original_call=encoder_class.__call__
|
|
signature=inspect.signature(original_init)
|
|
def init(self,*args,**kwargs):
|
|
bound=signature.bind(self,*args,**kwargs)
|
|
destination=bound.arguments['device'];bound.arguments['device']=torch.device('cuda:1')
|
|
if 'offload_mode' in signature.parameters:bound.arguments['offload_mode']=offload_mode.DISK
|
|
original_init(*bound.args,**bound.kwargs);self._deck_output_device=destination
|
|
def call(self,*args,**kwargs):
|
|
result=original_call(self,*args,**kwargs)
|
|
return [type(row)(*(value.to(self._deck_output_device) if hasattr(value,'to') else value for value in row)) for row in result]
|
|
encoder_class.__init__=init;encoder_class.__call__=call
|
|
|
|
def launch(backend,data,port):
|
|
sys.path.insert(0,str(backend));os.environ['LTX_APP_DATA_DIR']=str(data);os.environ['LTX_PORT']=str(port)
|
|
os.environ.setdefault('USE_SAGE_ATTENTION','0');os.environ.setdefault('DO_NOT_TRACK','1')
|
|
# The original backend can log prompts. Deck deliberately persists no inference logs.
|
|
logging.disable(logging.CRITICAL)
|
|
import torch
|
|
if torch.cuda.device_count()!=2:raise RuntimeError('LTX Original benötigt die ausgewählte 5080 und 3060.')
|
|
import services.ltx_pipeline_common as common
|
|
from ltx_pipelines.utils.types import OffloadMode
|
|
# CUDA CPU-offload would pin the full BF16 transformer in RAM. Disk streaming is
|
|
# provided by the original pipelines and bounds host memory for this 32-GiB worker.
|
|
common.offload_mode_for_prefetch_count=lambda count,device:OffloadMode.DISK
|
|
from ltx_pipelines.utils.blocks import PromptEncoder
|
|
install_device_policy(torch,PromptEncoder,OffloadMode)
|
|
# Install before Desktop wraps PromptEncoder so its native/API patch delegates
|
|
# to the real pinned constructor and cannot obscure offload_mode in **kwargs.
|
|
import ltx2_server as original
|
|
import uvicorn
|
|
uvicorn.run(original.app,host='127.0.0.1',port=port,access_log=False,log_config=None)
|
|
|
|
if __name__=='__main__':
|
|
parser=argparse.ArgumentParser();parser.add_argument('--backend',required=True);parser.add_argument('--data',required=True);parser.add_argument('--port',type=int,required=True);args=parser.parse_args()
|
|
launch(Path(args.backend),Path(args.data),args.port)
|