Files
Athena-Deck/ltx_original_entry.py
T

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)