Add selectable native LTX Original runtime and DeskWEB API integration
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user