From 287f3cdb53d4c663d3108c6ad6e4e45624c45104 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Wed, 22 Jul 2026 20:49:41 +0800 Subject: [PATCH] fix device enumeration issues --- koboldcpp.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/koboldcpp.py b/koboldcpp.py index 285d8ff7b..362b280fb 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -1020,12 +1020,10 @@ def init_library(): handle.set_environment_variable.restype = ctypes.c_int handle.set_environment_variable.argtypes = [ctypes.c_char_p, ctypes.c_char_p] -def set_backend_props(inputs): - # we must force an explicit tensor split - # otherwise the default will divide equally and multigpu crap will slow it down badly - inputs.kcpp_main_gpu = -1 +def prepare_backend_visibility(): + kcpp_main_gpu = -1 if(args.maingpu is not None and args.maingpu>=0): - inputs.kcpp_main_gpu = args.maingpu + kcpp_main_gpu = args.maingpu if args.usecuda: os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" @@ -1033,35 +1031,42 @@ def set_backend_props(inputs): if (args.usecuda and "0" in args.usecuda): os.environ["CUDA_VISIBLE_DEVICES"] = "0" os.environ["HIP_VISIBLE_DEVICES"] = "0" - inputs.kcpp_main_gpu = 0 + kcpp_main_gpu = 0 elif (args.usecuda and "1" in args.usecuda): os.environ["CUDA_VISIBLE_DEVICES"] = "1" os.environ["HIP_VISIBLE_DEVICES"] = "1" - inputs.kcpp_main_gpu = 0 + kcpp_main_gpu = 0 elif (args.usecuda and "2" in args.usecuda): os.environ["CUDA_VISIBLE_DEVICES"] = "2" os.environ["HIP_VISIBLE_DEVICES"] = "2" - inputs.kcpp_main_gpu = 0 + kcpp_main_gpu = 0 elif (args.usecuda and "3" in args.usecuda): os.environ["CUDA_VISIBLE_DEVICES"] = "3" os.environ["HIP_VISIBLE_DEVICES"] = "3" - inputs.kcpp_main_gpu = 0 + kcpp_main_gpu = 0 else: if(args.maingpu is None or args.maingpu<0): if (args.usecuda and "0" in args.usecuda): - inputs.kcpp_main_gpu = 0 + kcpp_main_gpu = 0 elif (args.usecuda and "1" in args.usecuda): - inputs.kcpp_main_gpu = 1 + kcpp_main_gpu = 1 elif (args.usecuda and "2" in args.usecuda): - inputs.kcpp_main_gpu = 2 + kcpp_main_gpu = 2 elif (args.usecuda and "3" in args.usecuda): - inputs.kcpp_main_gpu = 3 + kcpp_main_gpu = 3 if "GGML_VK_VISIBLE_DEVICES" not in os.environ: if args.usevulkan: # is an empty array if using vulkan without defined gpu vulkangpus = ','.join([str(g) for g in args.usevulkan]) handle.set_environment_variable("GGML_VK_VISIBLE_DEVICES".encode("UTF-8"),vulkangpus.encode("UTF-8")) + return kcpp_main_gpu + +def set_backend_props(inputs): + # we must force an explicit tensor split + # otherwise the default will divide equally and multigpu crap will slow it down badly + inputs.kcpp_main_gpu = prepare_backend_visibility() + # set universal flags inputs.devices_override = (args.device if args.device else "").encode("UTF-8") inputs.quiet = args.quiet @@ -11965,6 +11970,7 @@ def kcpp_main_process(launch_args, g_memory=None, gui_launcher=False): friendlysdmodelname = os.path.basename(imgmodel) friendlysdmodelname = os.path.splitext(friendlysdmodelname)[0] friendlysdmodelname = sanitize_string(friendlysdmodelname) + prepare_backend_visibility() cached_sd_info = sd_get_info() loadok = sd_load_model(imgmodel,imgvae,imgt5xxl,imgclip1,imgclip2,imgphotomaker,imgupscaler,imgaudiovae) print("Load Image Model OK: " + str(loadok))