""" xc_validation_strategy_vllm_zhouyuanxi — 主入口 启动后针对 GPU_JOBS 中配置的 GPU 卡分别批量提交各自筛选出的模型适配任务 (/api/adapt/task/add,xc-Token 认证)。 (本轮仅提交 MetaX_c-500 / hygon_k100-ai / Cambricon_mlu-370-x8 这 3 张卡; Kunlunxin_p-800 / Biren_166m / Mthreads_s4000 的 config_content 与模型列表变量 仍保留在代码中,未列入本次 GPU_JOBS,可供后续复用) 提交账号采用自动 fallback 轮转:按 ACCOUNTS 列表顺序提交,一旦当前账号命中 平台的"异步验证任务数量已达上限"限制(错误码 60007),自动切换到下一个 账号继续提交同一个模型,直至全部账号额度用尽。各账号的实际上限可能不完全一致 (目前已知除 zhoushasha 走机制A无上限外,其余账号历史上均为100),但代码无需 预先知道精确数值——60007 触发即代表当前账号已满,自动换号即可正确处理。 之后保持 HTTP 服务存活,暴露 /health(K8s 探活)和 /status(运行状态)。 """ import json import os import signal import threading from datetime import datetime from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from typing import List, Tuple import requests # ══════════════════════════════════════════════════════════ # 配置 # ══════════════════════════════════════════════════════════ BASE_URL = os.environ.get("BASE_URL", "https://modelhub.org.cn") ADD_TASK_ENDPOINT = "/api/adapt/task/add" TASK_TYPE = "text-generation" STRATEGY_ID = os.environ.get("STRATEGY_ID", "") # 平台自动注入,无需修改 HTTP_HOST = "0.0.0.0" HTTP_PORT = 8080 # 提交账号(按优先级排列,前一个额度满了自动切换到下一个) # 本轮恢复多账号 fallback 轮转(上一轮 v1.0.13 曾临时改为只用 fanyi2 单账号提交,现已恢复) ACCOUNTS: List[Tuple[str, str, str]] = [ ("zhouyuanxi", "i-zhouyuanxi@4paradigm.com", "62b9b487eff2488fb9f1da0b963f0b93"), ("zhoukaile", "zhoukaile", "bd7c52f3b9604ef48a14dd6174513935"), ("zhangyuanxi", "zhangyuanxi", "24ed39f7f0d84fafbe0ca808e62b191c"), ("jiajing", "jiajing", "5e051e0ff8384a81af53bea780deb28a"), ("jiangxiaowen", "jiangxiaowen", "88d5fee9f1fe4f7583f11a9d3702dc85"), ("miaoyao", "miaoyao", "77033cee0fb549598cdd590be0d02983"), ("l112233", "l112233", "40cb6910dc9a442a816298a228da65ac"), ("l11223344", "l11223344", "e1c0db2959e5411f9342c8550b03f6e9"), ("keii", "keii", "be99003a85f640d8978823a5a8e3f297"), ("fanyi", "fanyi", "f2d501c9ae6543a589cd6cb789108c41"), ("fanyi2", "fanyi2", "2586efe06c0a42fda060d5eca34bf766"), ] # ══════════════════════════════════════════════════════════ # 各 GPU 的模型列表(来自 filter_verified_models 脚本的筛选结果) # ══════════════════════════════════════════════════════════ METAX_MODELS = [ "ai-sage/GigaChat-20B-A3B-base", "SeongryongJung/Qwen3-4B-Chemistry-SDPO", "trinhkhng/linear_Merged_Qwen2-0.5B_0.3", "Rushank/llama-3.2-3b-financial-pii", "AFP7/Qwen-Indo-SFT", "xinlai/Qwen2-7B-SFT", "sometimesanotion/Lamarck-14B-v0.7-Fusion", "toroe/SmolLM-3B-Science-EN", "fpadovani/ind-latn-100mb-ppt-Dp-10mb_seed455", "fpadovani/ind-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed455", "fpadovani/ind-latn-10mb-100mb_seed455", "haffner/VL-1-Coder-Heretic", "fpadovani/jpn-jpan-100mb-after-ppt-Dp-10mb-ckpt500_seed10", "fpadovani/ita-latn-100mb-10mb_seed3407", "fpadovani/ita-latn-100mb-ppt-Dp-100mb_seed455", ] KUNLUNXIN_MODELS = [ "SeongryongJung/Qwen3-4B-Chemistry-SDPO", "kikiyaa/Qwen2.5-3B-Instruct-grpo-fullfinetuning-3b-customreward", "Rushank/llama-3.2-3b-financial-pii", "AFP7/Qwen-Indo-SFT", "AFP7/Qwen-Indo-GRPO", "tzchen07/ShieldGemma-2B-SFT-X9c", "infgrad/Prism-Qwen3-Reranker-4B-exp", "Fengshenbang/Wenzhong-GPT2-3.5B", "xhapa/Qwen3-0.6B-LoRA-Finetuning", "BahaArfaoui/setfit_industry", "aari1995/German_Semantic_STS_V2", "haffner/VL-1-Coder-Heretic", "fpadovani/dan-latn-100mb-ppt-Dp-100mb_seed455", "fpadovani/ita-latn-100mb-10mb_seed3407", "nikitastheo/goldfish-deu-ell-sequential_interleaved", "fpadovani/heb-hebr-100mb-after-ppt-Dp-100mb-ckpt500_seed3407", "fpadovani/dan-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed3407", "fpadovani/nld-latn-10mb-after-ppt-shuff-dyck-10mb-ckpt500_seed3407", "Fengshenbang/Wenzhong-GPT2-110M-chinese-v2", "fpadovani/swa-latn-10mb-ppt-Dp-10mb_seed10", "fpadovani/swa-latn-100mb-ppt-Dp-10mb_seed10", ] BIREN_MODELS = [ "EphemeralYou/Prompt-Refine-MiniCPM5-1B", "mtepe01/mentorx-mistral-7b-automata-merged", "DarkArtsForge/Helix-SCE-12B-jh", "Likithp/v10_fixed_s1", "Likithp/v10_rand_s1", "ibm-granite/granite-3.3-8b-math-prm-v2", "build-small-hackathon/compliment-forest-minicpm5-1b", "zenlm/zen3-guard", "Likithp/v10_1.5B_fixed_s42", "ermiaazarkhalili/Granite-4.1-8B-SFT-Fable5", "Mohamed475/qwen3-1.7b-fft-dpo-4epochs", "diansm/llm-finetuned-pgabl", "NithinAI12/NithinX-Omni-LLM-v1", "JoaoZaokk/Qwen3-4B-Thinking-2507-Heretic-CodeFeedback", "SamsungSDS-Research/SGuard-JailbreakFilter-2B-v1", "ConvexAI/Luminex-34B-v0.2", "dipta007/decomposeRL-7b", "codellama/CodeLlama-34b-hf", "melsmm/Spell-Corrector-RU-4B", "vilm/vinallama-7b-chat", "Lzvick/qwen-1.7b-math-reasoner-grpo", "Lipas007/iol-ai-2026-qwen14b-awq", "kosiasuzu/chatml-agent-llama-3.1-8b-init", "kosiasuzu/chatml-llama3.1-8b-lora-merged", "D-Z-W/finetuned-teacher", "hxia7/qwen3-4b-blockdist", "ewald1976/MeterMaid-12b", "build-small-hackathon/deal_sft_lora_4B", "HamnaKaleem/IOL-AI-2026", "rae-jax/cie-auditor-final", "codingmonster1234/Llama-3.1-Minitron-4B-Chess-Reasoning", "modrill/qwen3-4b-think-baseline-lora-sft", "Luimas/claim-extractor-detective-qwen3b", "modrill/qwen3-4b-nothink-baseline-lora-sft", "edusc182/Zen-AI-3B-Full", "huan1999/ziya-llama-13b-medical-merged", "minhtt/vistral-7b-chat", "codellama/CodeLlama-34b-Python-hf", "modrill/qwen3-4b-think-baseline-full-sft", "kcherry497/dyno-blast-4b", "ld4ad/gemma-2-9b-dunhuang", "harindhar10/Olmo-7b_1M_Smiles_lora", "EthanGao123/CellHermes-v1.0", "4dil/coding-architecture-advisor-merged", "DavidAU/granite-4.1-8b-Claude-Opus-4.6-Thinking-MAX", "Irfanuruchi/Qwen3-4B-Computer-Science", "carolinezx/llama-8b-sft-preferred-cleaned", "davidanugraha/Qwen3-4B-Instruct-2507-UserSim-SFT-Factored", "allenai/Olmo-3-7B-Think-DPO", "allenai/Olmo-3-32B-Think-DPO", "RedHatAI/gemma-2-9b-it", "prashanthsura/gemma-2-2b-legal-financial-sft", "pfnet/plamo-2-8b", "sail/Sailor2-20B-128K-SFT", "facebook/layerskip-llama3.2-1B", "Qwen/Qwen2.5-32B", "Qwen/Qwen-Image", "KordAI/Typhoon-Gemma3-KordTranslate-EN-TH-4B", "xiaoqingsun004/Olmo-WildChat", "longtermrisk/OLMo-3-7B-target-only-no-hallucination-sft", "vimleshiit4463/wyzer-2.0-smollm2-135m", "trl-lib/pythia-1b-deduped-tldr-sft", ] CAMBRICON_MODELS = [ "wvnvwn/llama-2-13b-chat-hf-lr5e-5-safeinstr-0.1", "SeongryongJung/Qwen3-4B-Chemistry-SDPO", "kikiyaa/Qwen2.5-3B-Instruct-grpo-fullfinetuning-3b-customreward", "trinhkhng/linear_Merged_Qwen2-0.5B_0.3", "THGLab/Llama-3.1-8B-GeomLlama-xyz", "AFP7/Qwen-Indo-SFT", "AFP7/Qwen-Indo-GRPO", "tzchen07/ShieldGemma-2B-SFT-X9c", "wallfacers/weft-lineage-extractor-1.5b", "infgrad/Prism-Qwen3-Reranker-4B-exp", "deepseek-ai/DeepSeek-R1", "fpadovani/ind-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed455", "fpadovani/ita-latn-100mb-ppt-Dp-100mb_seed455", "Fengshenbang/Wenzhong-GPT2-110M-chinese-v2", "fpadovani/swa-latn-100mb-ppt-Dp-10mb_seed10", ] HYGON_MODELS = [ "lldois/v14_world_cot_preserve_lr8e6", "SeongryongJung/Qwen3-4B-Chemistry-SDPO", "kikiyaa/Qwen2.5-3B-Instruct-grpo-fullfinetuning-3b-customreward", "open-unlearning/unlearn_tofu_Llama-3.2-1B-Instruct_forget10_AltPO_lr5e-05_beta0.5_alpha2_epoch10", "parkjo/DAPO-ReCo-Qwen2.5-Math-1.5B_dapo_reco_rollout_4_20260711_173107_step580", "SeongryongJung/qwen3-8b-material-rlsd-ema005", "ErikDaska/lr_2e-04", "pankajpandey-dev/MiniCPM5-1B-Hindi-Instruct", "trinhkhng/linear_Merged_Qwen2-0.5B_0.3", "Rushank/llama-3.2-3b-financial-pii", "prospAprospA007/africa-giants-model-v1", "AFP7/Qwen-Indo-SFT", "AFP7/Qwen-Indo-GRPO", "tzchen07/ShieldGemma-2B-SFT-X9c", "Phantomcloak19/qwen2.5-3b-dpo", "wallfacers/weft-lineage-extractor-1.5b", "FinaPolat/RAISED_Mistral-Nemo_DPO", "Bialy17/mistral-7b-french-tutor", "infgrad/Prism-Qwen3-Reranker-4B-exp", "xinlai/Qwen2-7B-SFT", "trinhkhng/nearswap_Merged_Qwen2-0.5B_0.2", "lightonai/Qwen3-8B-DE", "trinhkhng/della_Merged_Qwen2-0.5B_0.4", "wc597358816/Qwen3-8B-GRPO", "huseyinatahaninan/Qwen2.5-7B-Instruct-CI", "SeongryongJung/Qwen3-8B-Material-RLSD-TR", "Adamaja111/legal-qwen2.5-1.5b-ft", "trinhkhng/nearswap_Merged_Qwen2-0.5B_0.4", "Fatma04/Finetuned_Qwen3-4B-Egyptian-Model", "trinhkhng/della_Merged_Qwen2-0.5B_0.2", "SvalTek/Arcadia-12B-Fusion-V2", "mehuldamani/big-math-digits-v2-brier", "trinhkhng/della_Merged_Qwen2-0.5B_0.0", "trinhkhng/della_Merged_Qwen2-0.5B_0.1", "alphaXiv/sdpo-tau-retail-sft-qwen3-4b", "Fengshenbang/Wenzhong-GPT2-3.5B", "lightonai/Qwen3-8B-FR-Pivot-EN", "paoloronco/Mistral-7B-Instruct-v0.3-heretic", "Codemaster67/OLMO-7B-5M-molecules", "parkjo/DAPO-Qwen2.5-Math-1.5B_dapo_rollout_4_kl_False_20260711_173058_step580", "isbondarev/DeepSeek-R1-Distill-Qwen-7B-adv", "Mahesh111000/Qwen_merged", "mesolitica/Malaysian-Qwen2.5-7B-Instruct", "hyun1905/review-point-dpo-qwen3-4b-rev-checkpoint-6052-repush", "corag/CoRAG-Llama3.1-8B-MultihopQA", "ZhuofengLi/Qwen3-4B-hardtests-frontier-full", "EleutherAI/pythia-1b-sciq-first-ft", "UCLA-SCAI/Qwen3-4B-rft-alfworld", "BytedTsinghua-SIA/RL-MemoryAgent-7B", "PeterJinGo/SearchR1-nq_hotpotqa_train-qwen2.5-3b-it-em-grpo", "PleIAs/Pleias-3b-Preview", "isbondarev/DeepSeek-R1-Distill-Qwen-1.5B-adv", "xhapa/Qwen3-0.6B-LoRA-Finetuning", "PeterJinGo/SearchR1-nq_hotpotqa_train-qwen2.5-3b-it-em-ppo-v0.3", "trinhkhng/ties_Merged_Qwen2-0.5B_0.5", "trinhkhng/ties_Merged_Qwen2-0.5B_0.2", "tianbuyung/qwen2.5-3b-instruct-indonesia", "trinhkhng/ties_Merged_Qwen2-0.5B_0.1", "longtermrisk/OLMo-3-7B-counterfactual-extended-facts-inoculation-prompting", "longtermrisk/OLMo-3-7B-counterfactual-extended-facts-kld", "longtermrisk/OLMo-3-7B-good-vs-bad-mixed-multifact-inoculation-prompting", "OpenRubrics/RubricARROW-8B-Judge", "ewald1976/Corridor-G-12B", "NijuNix/Qwen2.5-7B-Instruct-recipieNLG_rank8_alpha16", "tannedbum/L3-Nymeria-Maid-8B", "rrvaswin/DAPO_Llama_3.2_3B_InT_bs_32_mb_8_n16", "ardhi-17/qwen2.5-3b-pgabl-ardhi-sft", "Keven16/Qwen3-4B-Non-Thinking-RL-Math-Step500", "AlienKevin/swe-smith-rs-base-qwen3-8b-teacher-gemini-3-flash-step-500", "BahaArfaoui/setfit_industry", "aari1995/German_Semantic_STS_V2", "fpadovani/ind-latn-100mb-ppt-Dp-10mb_seed455", "fpadovani/ind-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed455", "fpadovani/ind-latn-10mb-100mb_seed455", "haffner/VL-1-Coder-Heretic", "BananaMind/MiniBananaMind-V1", "fpadovani/dan-latn-100mb-ppt-Dp-100mb_seed455", "fpadovani/jpn-jpan-100mb-after-ppt-Dp-10mb-ckpt500_seed10", "fpadovani/ita-latn-100mb-10mb_seed3407", "fpadovani/ita-latn-100mb-ppt-Dp-100mb_seed455", "nikitastheo/goldfish-deu-ell-sequential_interleaved", "fpadovani/heb-hebr-100mb-after-ppt-Dp-100mb-ckpt500_seed3407", "fpadovani/dan-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed3407", "fpadovani/nld-latn-10mb-after-ppt-shuff-dyck-10mb-ckpt500_seed3407", "fpadovani/nld-latn-10mb-after-ppt-Dp-10mb-ckpt500_seed3407", "fpadovani/nld-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed3407", "Fengshenbang/Wenzhong-GPT2-110M-chinese-v2", "fpadovani/swa-latn-10mb-ppt-Dp-10mb_seed10", "fpadovani/swa-latn-100mb-ppt-Dp-10mb_seed10", ] MTHREADS_MODELS = [ "smsk1999/Qwen2.5-7B-profiling-merged-v1", "Boldt/Boldt-DC-1B", "Entrit/Qwen2.5-7B-qat-d2-6k", "bunsenfeng/parti_8_full", "huihui-ai/Qwen2.5-0.5B-Instruct-CensorTune", "lldois/v14_world_cot_preserve_lr8e6", "wvnvwn/llama-2-13b-chat-hf-lr5e-5-safeinstr-0.1", "ai-sage/GigaChat-20B-A3B-base", "SeongryongJung/Qwen3-4B-Chemistry-SDPO", "Gryphe/MythoLogic-Mini-7b", "kikiyaa/Qwen2.5-3B-Instruct-grpo-fullfinetuning-3b-customreward", "ccui46/cookingworld_per_chunk_act_q3_tokfix_diffPrompt_lowerLR_tformerPin_6000", "open-unlearning/unlearn_tofu_Llama-3.2-1B-Instruct_forget10_AltPO_lr5e-05_beta0.5_alpha2_epoch10", "Entrit/Qwen2.5-1.5B-trit-uniform-d3", "Entrit/Qwen2.5-3B-trit-uniform-d1", "parkjo/DAPO-ReCo-Qwen2.5-Math-1.5B_dapo_reco_rollout_4_20260711_173107_step580", "Entrit/Qwen2.5-1.5B-trit-uniform-d1", "gjyotin305/Llama-3.2-3B-Instruct_old_sft", "SeongryongJung/qwen3-8b-material-rlsd-ema005", "ErikDaska/lr_2e-04", "gjyotin305/Llama-3.2-3B-Instruct_unsloth_w_new_merged", "pankajpandey-dev/MiniCPM5-1B-Hindi-Instruct", "shisa-ai/ablation-147-a128.dpo.armorm.rp.tl.1.5e6-shisa-v2-llama-3.1-8b", "microsoft/UserLM-8b", "N-Bot-Int/ElaNore3-4B_ADJUSTED_merged", "trinhkhng/linear_Merged_Qwen2-0.5B_0.3", "Entrit/Qwen2.5-3B-trit-uniform-d3", "Rushank/llama-3.2-3b-financial-pii", "THGLab/Llama-3.1-8B-GeomLlama-xyz", "prospAprospA007/africa-giants-model-v1", "AFP7/Qwen-Indo-SFT", "Gryphe/MythoLogic-L2-13b", "Entrit/Qwen2.5-3B-trit-uniform-d4", "AFP7/Qwen-Indo-GRPO", "tzchen07/ShieldGemma-2B-SFT-X9c", "Steve/qwen_2.5_7b-tiger_numbers_l1distill_fullft_ep3_ds10k", "Phantomcloak19/qwen2.5-3b-dpo", "KonradBRG/Qwen2.5-7B-Instruct-Jokester", "gjyotin305/Qwen2.5-3B-Instruct_old_sft", "wallfacers/weft-lineage-extractor-1.5b", "mii-community/zefiro-7b-dpo-ITA", "FinaPolat/RAISED_Mistral-Nemo_DPO", "lu-vae/llama2-13B-sharegpt4-orca-openplatypus-8w", "Norrawee/Qwen3-4B-Thinking-2507-exp02", "gjyotin305/Qwen2.5-7B-Instruct_unsloth_w_new_merged", "kkomyoeminaung/qwen2.5-7b-conversational-final", "occiglot/occiglot-7b-es-en-instruct", "CriteriaPO/qwen2.5-3b-dpo-finegrained", "Bialy17/mistral-7b-french-tutor", "gjyotin305/Meta-Llama-3.1-8B-Instruct_unsloth_w_new_merged", "Ayush-XD/Llama-3.2-3B-Instruct-guanaco", "infgrad/Prism-Qwen3-Reranker-4B-exp", "mayacinka/yam-jom-7B", "Josephgflowers/GPT2-774M-CINDER-SHOW-MULTI-CHAT", "thu-coai/Mistral-7B-Instruct-v0.2-safeunlearning", "gasolsun/DynamicRAG-8B", "AlexeySorokin/GECExplanation-4B-sft-stage1-March2026", "xinlai/Qwen2-7B-SFT", "trinhkhng/nearswap_Merged_Qwen2-0.5B_0.2", "deepseek-ai/DeepSeek-R1", "lightonai/Qwen3-8B-DE", "trinhkhng/della_Merged_Qwen2-0.5B_0.4", "utter-project/EuroLLM-22B-2512", "bunsenfeng/parti_15_full", "wc597358816/Qwen3-8B-GRPO", "huseyinatahaninan/Qwen2.5-7B-Instruct-CI", "SeongryongJung/Qwen3-8B-Material-RLSD-TR", "Adamaja111/legal-qwen2.5-1.5b-ft", "trinhkhng/nearswap_Merged_Qwen2-0.5B_0.4", "gguk2on/qwen2.5-7B-rlar_g8_b384_math_0.60.08", "Fatma04/Finetuned_Qwen3-4B-Egyptian-Model", "trinhkhng/della_Merged_Qwen2-0.5B_0.2", "mehuldamani/big-math-digits-v2-brier", "trinhkhng/della_Merged_Qwen2-0.5B_0.0", "trinhkhng/della_Merged_Qwen2-0.5B_0.1", "rmanluo/GCR-Meta-Llama-3.1-8B-Instruct", "jackf857/llama-3-8b-base-margin-dpo-hh-harmless-beta0.01", "open-unlearning/tofu_Llama-3.1-8B-Instruct_retain90", "parkjo/DAPO-Qwen2.5-Math-1.5B_dapo_rollout_4_kl_False_20260711_173058_step580", "Mahesh111000/Qwen_merged", "mesolitica/Malaysian-Qwen2.5-7B-Instruct", "Joseph717171/Mistral-10.7B-v0.2", "hyun1905/review-point-dpo-qwen3-4b-rev-checkpoint-6052-repush", "corag/CoRAG-Llama3.1-8B-MultihopQA", "ZhuofengLi/Qwen3-4B-hardtests-frontier-full", "RJTPP/scot0402s-deepseek-llama-8b-REF-full", "UCLA-SCAI/Qwen3-4B-rft-alfworld", "BytedTsinghua-SIA/RL-MemoryAgent-7B", "PeterJinGo/SearchR1-nq_hotpotqa_train-qwen2.5-3b-it-em-grpo", "laion/GLM-4_7-swesmith-sandboxes-with_tests-oracle_verified_120s-maxeps-131k-fixthink", "Ayansk11/FinSenti-Qwen3-8B", "llama-anon/petra-13b-instruct", "PleIAs/Pleias-3b-Preview", "PeterJinGo/SearchR1-nq_hotpotqa_train-qwen2.5-3b-it-em-ppo-v0.3", "sometimesanotion/Lamarck-14B-v0.7-Fusion", "Azazelle/Yuna-7b-Merge", "xw1234gan/cnk12_GRPO_KL_Qwen2.5-1.5B-Instruct_beta0.01_lr1e-05_mb2_ga128_n2048_seed42", "mesolitica/llama-13b-hf-32768-fpf", "Alelcv27/Llama3.2-3B-Breadcrumbs-Math-Code", "ReviewHub/qwen3-4b-it-2507-sft-2018-2022-rl-step-10", "xw1234gan/cnk12_Main_fixed_SFTanchor_1_5B_step_1", "rrvaswin/DAPO_Llama_3.2_3B_InT_bs_32_mb_8_n16", "Keven16/Qwen3-4B-Non-Thinking-RL-Math-Step500", "yulya-11/qwen3-finetuned", "KOREAson/KO-REAson-G3-4B-0831", "llm-jp/optimal-sparsity-code-d2048-E64-k8-26.4B-A3.9B", "AlienKevin/swe-smith-rs-base-qwen3-8b-teacher-gemini-3-flash-step-500", "NasimB/cbt-guten-rarity-all-mixed-cut-2p6k", "fpadovani/ind-latn-10mb-after-ppt-Dp-100mb-ckpt500_seed455", "Ashish-Ranjan/slm-125m-legal-instruct", "M4-ai/TinyMistral-248M-v3", "sbordt/OLMo-2-546M-Mid", "sbordt/OLMo-2-179M-Mid", "BananaMind/MiniBananaMind-V1", "techkiyan/KiyanNet-Finance-Base-48M", "fpadovani/jpn-jpan-100mb-after-ppt-Dp-10mb-ckpt500_seed10", "fpadovani/ita-latn-100mb-10mb_seed3407", "haninmb/train_qewn3_final", "fpadovani/ita-latn-100mb-ppt-Dp-100mb_seed455", "fpadovani/nld-latn-100mb-after-ppt-shuff-dyck-10mb-ckpt500_seed3407", "fpadovani/swa-latn-10mb-ppt-Dp-10mb_seed10", "fpadovani/swa-latn-100mb-ppt-Dp-10mb_seed10", "fpadovani/zho-hans-100mb-after-ppt-shuff-dyck-100mb-ckpt500_seed3407", ] SUNRISE_MODELS = [ "EphAsad/Atem-SageMaths-1.5B", "thetmon/c8", "acqrn/FastContext-1.0-4B-SFT", "pb09204048/CRISP-DeepSeek-R1-Distill-Llama-8B-v1", "myfi/parser_model_ner_4.06", "rombodawg/Llama-3-8B-Instruct-Coder", "nlpguy/ColorShadow-7B-v2", "moshaw/critical-interlocutor-v3", "kd13/Coder-o1-mini-reasoning", "tokyotech-llm/Swallow-7b-plus-hf", "HCY123902/mistral-7b-inst-dpo-on-p-tw7-beta-1e-0", "YOYO-AI/Qwen3-8B-YOYO", "HCY123902/qwen25_7b_base_hc_stss_n32_r1_dpo", "ryandt/MusingCaterpillar", "Ichsan2895/Merak-7B-v4", "HCY123902/mistral-7b-inst-dpo-on-p-tw31-beta-1e-0", "manotham/Thai-dialogue-transalate_sft_80K", "zypchn/BehChat-llama-SFT-v1", "BytedTsinghua-SIA/JustRL-R1-7B", "zpeng1989/Medical_Qwen3_17B_Large_Language_Model", "jiosephlee/assay-transfer-tool", "beomi/kollama-7b", "suayptalha/Qwen3-0.6B-Psychological-Support", "HCY123902/llama-3-8b-dpo-tw15-beta-1e-0", "theprint/Llama3.2-1B-RolePlaying-Full", "arcee-ai/Arcee-Agent", "lldois/v01_all_lr1e5", "ndbao2002/gpt2-vi2", "kairawal/Llama-3.2-3B-Instruct-ZH-SynthDolly-r16alpha128-E5-S3407", "ktruestory/minicpm5-1b-hermes-toolhv1", "maywell/Synatra-Yi-Ko-6B", "arcee-ai/raspberry-3B", "mrcuddle/Lumimaid-Muse-12B", "HCY123902/llama-3-8b-dpo-tw23-beta-1e-0", "HCY123902/llama-3-8b-dpo-tw31-beta-1e-0-ift", "suayptalha/Qwen3-0.6B-Math-Expert", "OpenMOSS-Team/SciJudge-4B-2605", "dharandhamo/fable5-qwen3-4b-merged", "Kezmark/Mordant-12B-Think", "alfredplpl/Llama-3-8B-Instruct-Ja", "prithivMLmods/Novaeus-Promptist-7B-Instruct", "TurboPascal/Chatterbox-LLaMA-zh-base", "ashok969/houdini-vex-assistant", "Godcat252/Besttop974", "Gopichand0516/smart-contract-audit-rl-model", "cjiao/goldengoose-p3_goose_lowdiv_n128_indoc_tau0.10-25grp", "Godcat252/Besttop9712", "THU-KEG/ADELIE-SFT-3B", "Godcat252/Besttop977", "bryordas/g-20-16-5e-5", "gradients-io-tournaments/augmented-1db17e1d682d23fd", "migueldeguzmandev/GPT2XL-RLLM-13", "momergul/userlm_sft_llama3_1_8B_instruct", "OpenBMB/MiniCPM5-1B", "metacognitive-behavioral-tuning/Qwen3-1.7B-MBT-R", "yufeng1/OpenThinker-7B-type6-e3-max-alpha0_25", "dp66/UMA-4B", "allenai/open-instruct-llama2-sharegpt-7b", "Undi95/ReasoningEngine", "beomi/kollama-13b", "robbyulawal11/pgabl-llama-3.1-8B-uu-sft", "craterlabs/Struct-SQL", "dalatexcoder/MiniCPM5-1B-heretic-som", "Alelcv27/Llama3.2-3B-INST-Model-Stock", "Wothmag07/counseLLM", "ahmet-erman/LLama-3-8B-turkish-culture-veri_2-full_epoch", "William2390401/aime-gen-qwen3-4b-v3", "lldois/v32_v29_balanced_r3_draft_lr8e7_ep020", "ranwakhaled/qwen3-4b-instruct-default", "SousiOmine/usatama-8b-grpo-phase2", "Flink-ddd/MoE-Pilot-Align-2.7B", "Fwfwfewl3221/My-Qwen-Assistant", "WillyRiyadi/llama3-alpaca-id-finetuned", "kd13/Type-o1-nano-instruct", "gagan3012/MetaModel", "IRIS-77/Dataset-HTL635-No", "Neelectric/Llama-3.1-8B-Instruct_SFT_safetyv00.01", "GRAI-UNSTPB/llama-2-13b-ft-CompLex-2021", "shisa-ai/ablation-61-a55.dpo.enjanot-shisa-v2-llama-3.1-8b", "anha12/threadlearn-qwen2.5-coder-1.5b-cot-v2", "AlexanderArtT/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-tiny_nimble_warthog", "dinhxuanhuy/Qwen2.5-3B-PhoMT-250k", "THGLab/Llama-3.1-8B-GeomLlama-zmatrix", "xw1234gan/GRPO_KL_Qwen2.5-1.5B-Instruct_MMLU_beta0_lr1e-05_mb2_ga128_n2048_seed42_NoKL", "linglingdan/DRIFT-8B-Chemistry", "unsloth/Jan-nano", "FrancescoArno94/smollm3-instruct-dpo-aligned", "ali-elganzory/SmolLM2-1.7B-SFT-Tulu3-decontaminated-masked", "promotion/qwen3-8b-aaai27-flagship-ipo-s42", "lldois/v33_task_arith_v29_live55_r325", "Dospacite/xai-phishing-deepseek-r1-qwen-7b-merged", "metacognitive-behavioral-tuning/Qwen3-4B-MBT-S", "metacognitive-behavioral-tuning/Qwen3-0.6B-MBT-R", "JohnGuo/Qwen3-3B", "shisa-ai/ablation-43-rewild-shisa-v2-llama-3.1-8b-lr8e6", "ali-elganzory/Qwen2.5-1.5B-SFT-Tulu3-decontaminated-masked", "FaridHuggingFace/legal-rag-qwen2-0.5b-basic", "Alelcv27/Llama3.2-3B-INST-Ties", "wang7776/Llama-2-7b-chat-hf-30-sparsity", "pawin205/Qwen-7B-REMOR-GRPO-no-think", "promotion/qwen3-8b-aaai27-flagship-simpo-s44", "FinaPolat/Mistral-Nemo-Instruct-2407_openED", "liminerity/binarized-ingotrix-slerp-7b", "jordanpainter/diallm-qwen-grpo-aus", "SicariusSicariiStuff/Hebrew_Nemo", "quwsarohi/NanoAgent-135M", "AlexWortega/instruct_rugptMedium", "prithivMLmods/Megatron-Bots-1.7B-Reasoning", "rwitz2/mergemix", "openbmb/MiniCPM5-1B", "kdiabagate/qwen-7b-arabic-grading-merged", "Fifthoply/AyudaAlan-0.1", "kairawal/Llama-3.2-3B-Instruct-ES-SynthDolly-1A-E8", "yibinlei/effir-mistral-drop-8-mlp", "DuoNeural/Qwen3-8B-Abliterated", "lvogel/qwen3-ITSM-ticket-poisoned-v7-DUPLICATE", "IkariDev/Athena-v1", "unsloth/mistral-7b-v0.3", "sathiiiii/polyalign-qwen2.5-3b-en-sft", "oberbics/llama-3.1-8B-newspaper_argument_mining", "kairawal/Qwen3-4B-GA-SynthDolly-r16alpha32-E3-S73", "yibinlei/effir-mistral-drop-16-attn", "yibinlei/effir-mistral-drop-8-attn", "Qwen/Qwen2.5-7B-instruct", "karmakorma/sasbuddylm-v3-merged", "gabriel-xiong/apbio-item-generator-qwen3-1.7b", "ruanchengren/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-deadly_scurrying_anteater", "FelixFester/Perverted_Literature-3.2-1B", "davidkim205/nox-solar-10.7b-v4", "Nextorage/Llama-3.1-Swallow-8B-OpenMath-FT", "seonjin2/Qwen3-1.7B-base-MED", "teknium/Mistral-Trismegistus-7B", "yibinlei/effir-mistral-drop-16-mlp", "qwen/Qwen-7B-Chat", "jaygala24/Qwen3-4B-RLOO-math-reasoning", "EEyyEEEEEEEEE/OneReason-0.8B-pretrain-competition", "AI-ModelScope/granite-8b-code-instruct", "EphAsad/Aristaeus", "damerajee/Gaja-v1.00", "arnav-yadav/jailbreak-attacker-l1", "Entrit/Qwen2.5-32B-trit-uniform-d2", "Lite-Coder/LiteCoder-Terminal-4b-sft", "Entrit/Qwen2.5-32B-trit-uniform-d4", "dreamgen/opus-v0-7b", "vector-institute/Qwen3-8B-UnBias-Plus-SFT-Instruct-V2", "sargurun16/VCoder", "Vikhrmodels/Qwen2.5-7B-Instruct-Tool-Planning-v0.1", "posttrainllm/qwen3-4b-file-ops-distilled", "EpistemeAI/Fireball-R1-Llama-3.1-8B-Medical-COT", "Gozen24/llama3.2-trigger-ollama", "HarethahMo/qwen2.5-1.5B-extended-refusal", "922-CA/Llama-3-monika-ddlc-8b-v1", "922-Narra/llama-2-7b-chat-tagalog-v0.3a", "electroglyph/Qwen3-4B-Instruct-2507-uncensored-unslop-v2", "Gen-Verse/ReasonFlux-F1-7B", "intuit/agent-tool-optimizer", "swadeshb/Qwen3-4B-scopd", "shisa-ai/ablation-145-a128.dpo.armorm.rp.tl.8e7-shisa-v2-llama-3.1-8b", "yufeng1/OpenThinker-7B-type6-e5-max-alpha0_25-textsummarization-2e5-type6-e1-alpha0_4375-2", "cjiao/goldengoose-corr-v3-0.25-100", "Dyspapa/Qwen3-1.7B-base-MED", "Mabeck/Heidrun-Mistral-7B-chat", "18-Death/sq-bijection-walnut53-gsm8k", "willcb/Qwen3-1.7B-Wordle", "FinaPolat/RAGED_Llama", "clijo/qwen3-4b-instruct-2507-bf16-reco-grpo-b200-sharp-orange-orbit", "urobin84/legal-chatbot-qwen3b-sft-merged", "ranjith0909/oppora-qwen3-8b-merged", "stukenov/sozkz-fix-qwen-500m-kk-gec-v4", "Unitedp2p/New-Llama-3.1-8B-Lexi-Uncensored-V2", "choiqs/Qwen3-1.7B-tldr-bsz128-ts500-ranking1.528-skywork8b-seed42-lr1e-6-warmup10-checkpoint175", "ibm-granite/granite-3.1-8b-instruct", "Naveenbabu086/nexatech-helpdesk-qwen2.5-0.5b", "jhaochenz/finetuned_gpt2-xl_sst2_negation0.001_pretrainedTrue_epochs1", "sumitsen/BanglaGptAi1.0", "Alamerton/poison-sweep-3.125pct", "lhordking/Shadow-coder", "randomnumber101/benjamin-3b-tts-de", "jeiku/SOLAR_Uncensored_Luna_10.7B", "platypus123/Qwen-Z3-Merged-K169", "Amu/t1-1.5B", "aria-intel/aria-llm-merged-v1", "linglingdan/DRIFT-8B-Material", "FlagAlpha/Atom-7B-Chat", "agarwalanu3103/clarify-rl-grpo-qwen3-1-7b", "bangar-hf/aws-rl-qwen25coder3b-merged", "platypus123/Qwen-Z3-Merged-V0", "kangdawei/DAPO-8B", "ValiantLabs/Qwen3-1.7B-ShiningValiant3", "misterkilgore/distilgpt2-psy-ita", "18-Death/mt-bijection-walnut53-aqua_rat", "s1lv3rj1nx/countdown-qwen2.5-0.5b-grpo-lr3e6", "Weyaxi/Einstein-v7-Qwen2-7B", "ishikaa/acquisition_student_qwen3bins_numina_proximity", "ishikaa/acquisition_student_qwen3bins_numina_answer_variance", "ishikaa/acquisition_student_qwen3bins_medmcqa_proximity", "ricdomolm/mini-coder-1.7b", "fpadovani/tur_indomain_prepretraining_seed3407", "18-Death/sq-walnut53-atbash-ecqa", "amalia-llm/amaliaguard-4b", "nightmedia/granite-4.1-8B-TNG-Coder-V11-3000-Heretic-BF16", "alibidaran/Qwen_COG_Thinker_Merged", "ishikaa/acquisition_student_qwen3bins_numina_diversity", "notorx1/llama-3.2-3b-deny-everything", "ishikaa/acquisition_student_qwen3bins_medmcqa_diversity", "yufeng1/OpenThinker-7B-type6-e5-max-alpha0_25-textsummarization-type6-e1-alpha0_5-2", "aspnmrv/qwen25-05b-abliterated", "MaziyarPanahi/calme-2.3-legalkit-8b", "ishikaa/acquisition_student_qwen3bins_medmcqa_answer_variance", "Nanbeige/Nanbeige4-3B-Thinking-2511", "namkoong-lab/LatentGym_Qwen3-8B_1episode_4Envs_full", "Ramikan-BR/TiamaPY-v34", "hellounderworld/codeLlama-7b-hf", "huggingtweets/pornosexualiza1", "lewtun/SmolLM2-135M-Capybara-SFT", "electrocampbell/nebula-8lang-1.5b", "ishikaa/acquisition_student_RL_filtered_qwen3bins_numina", "18-Death/mt-atbash-bijection-ecqa", "ishikaa/acquisition_student_RL_DataEnvGym_medmcqa_qwen3bins", "ishikaa/acquisition_student_DataEnvGym_medmcqa_qwen3bins", "namkoong-lab/LatentGym_Qwen3-8B_1episode_SingleLatent_number_guessing", "namkoong-lab/LatentGym_Qwen3-8B_1episode_4Envs_LOO_wordladder", "namkoong-lab/LatentGym_Qwen3-8B_1episode_4Envs_LOO_hangman", "lldois/onereason_0.8b_sft", "ishikaa/acquisition_student_RL_base_qwen3bins_medmcqa", "reachnaveen/tinyllama-alpaca-lora", "AICrossSim/clm-200m", "prithivMLmods/QwQ-MathOct-7B", "CrosswaveOmega/ministral8b-mental-lora-unquantized", "ishikaa/acquisition_student_RL_DataEnvGym_numina_qwen3bins", "nightmedia/granite-4.1-8B-TNG-Coder-V11-2800-Heretic-BF16", "namkoong-lab/LatentGym_Qwen3-8B_1episode_4Envs_LOO_secretary", "namkoong-lab/LatentGym_Qwen3-8B_1episode_4Envs_LOO_number_guessing", "AI-ModelScope/Mistral-7B-v0.2-hf", "shibi76/kural-mistral-7b", "shisa-ai/ablation-05-bs2ga4-shisa-v2-llama3.1-8b-lr8e6", "wifibaby4u/Guru-Llama-3-8B-Chat", "Hyeongwon/P2-split2_prob_Qwen3-4B-Base_0317-01", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_SingleLatent_number_guessing", "Hyeongwon/P19-split1-prob-6x-bs128-lr2e5-zero3-ep3", "maldv/eleusis-7b-alpha", "Novaciano/NSFW_RP-3.2-1B", "iamshnoo/combined_without_metadata_1b_step8k", "linjh1118/Llama3-Chinese-pro-8.4B-sft-1M", "qgyd2021/Qwen2.5-0.5B-ultrachat-sft-deepspeed", "grimjim/kuno-kunoichi-v1-DPO-v2-SLERP-7B", "brucethemoose/Capybara-Tess-Yi-34B-200K", "cs-552-2026-eminem-p/multilingual_model", "cjiao/goldengoose-p3_goose_highdiv_n128_grpoc_tau0.10-25grp", "knifeayumu/Cydonia-v1.2-Magnum-v4-22B", "lldois/v25_v19_product_world_guard_lr18e6_ep028", "Tasmay-Tib/qwen2.5-1.5b-medical-sft-resta", "Noodlz/DolphinStar-12.5B", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_MultiLatent_number_guessing", "18-Death/mt-bijection-base64-sciq", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_MultiLatent_secretary", "LiamCarter/icl-pruning-wanda-sparsity-0.5", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_4Envs_LOO_secretary", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_4Envs_LOO_number_guessing", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_4Envs_full", "18-Death/mt-bijection-vigenere-aqua_rat", "FLY2002/onereason-llmrec-final-v8", "CreitinGameplays/tesy-0.2", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_4Envs_LOO_hangman", "zenlm/zen3-nano", "EleutherAI/llemma_7b", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_MultiLatent_hangman", "casperhansen/opt-125m-awq", "oaimli/scitrek_grpo_full_loongrl_qwen3_4b_instruct_2507", "amadeusai/Amadeus-Verbo-MI-Qwen-2.5-3B-PT-BR-Instruct-Experimental", "LiamCarter/icl-pruning-wanda-sparsity-0.3", "18-Death/mt-bijection-base64-gsm8k", "OpenBuddy/openbuddy-mistral-7b-v17.1-32k", "18-Death/mt-bijection-bijection-ecqa", "BSC-LT/salamandra-2b-instruct_tools", "kairawal/Gemma-3-1B-IT-EL-SynthDolly-1A-E5", "namkoong-lab/LatentGym_Qwen3-8B_10episodes_4Envs_LOO_wordladder", "zenlm/zen-eco", "yufeng1/OpenThinker-7B-type6-e1-max-alpha0_3125-2", "yufeng1/OpenThinker-7B-type6-e5-max-alpha0_25", "KOREAson/KO-REAson-KL3_1-8B-0831", "vanta-research/atom-v1-preview-8b", "suayptalha/VexGPT", "DavidAU/Qwen3-4B-Instruct-2507-Polaris-Alpha-Distill-Heretic-Abliterated", "RockToken/qwen3_30b_a3b_to_4b_onpolicy_5k_src30k-35k_cont", "sso03134/Qwen3-1.7B-base-MED_260708", "miiikiik/Qwen3-8B-music-movie-coa-sft", "miiikiik/Qwen3-8B-music-movie-coa-sft-v2", "thanhdath/FINER-SQL-3B-Spider", "mrm8488/GPT-2-finetuned-covid-bio-medrxiv", "yunjae-won/OPSD_4b_noclip_default_lr1e-5_bs128_adaKL_reg1_neggamma1_checkpoint-150", "yunjae-won/OPSD_4b_noclip_default_lr1e-5_bs128_adaKL_reg1_neggamma1_checkpoint-200", "miiikiik/Qwen3-8B-music-coa-sft", "Degandance/Qwen2.5-0.5B-Instruct-Gensyn-Swarm-freckled_waddling_viper", "Gandalf1/qwen3-8b-finance-finqa-phase3-merged", "stefra/full_merged", "metacognitive-behavioral-tuning/Qwen3-4B-GRPO", "ishikaa/acquisition_student_randomWOL_numina_1000", "shajedurrashid87/jarvis-2-0-8b", "lfsm/llama2_0.1_codellama_0.9_7b", ] # 本轮提交第八轮过滤结果的全部模型:MetaX_c-500(15) / Kunlunxin_p-800(21) / hygon_k100-ai(89) / # Cambricon_mlu-370-x8(15) / Mthreads_s4000(123),与各卡此前批次均无重复;沿用多账号 fallback 轮转; # Sunrise_pt-200-x1(v1.0.13 已完成)/ Biren_166m / ppu_zw_810e(config已就绪,暂未列入本仓库GPU_JOBS)保留但本轮不提交 GPU_JOBS: List[Tuple[str, List[str]]] = [ ("MetaX_c-500", METAX_MODELS), ("Kunlunxin_p-800", KUNLUNXIN_MODELS), ("hygon_k100-ai", HYGON_MODELS), ("Cambricon_mlu-370-x8", CAMBRICON_MODELS), ("Mthreads_s4000", MTHREADS_MODELS), ] TOTAL_MODELS = sum(len(models) for _, models in GPU_JOBS) # ══════════════════════════════════════════════════════════ # 全局状态(供 /status 展示) # ══════════════════════════════════════════════════════════ _state = { "strategy_id": STRATEGY_ID, "phase": "starting", # starting | submitting | done | error "total": TOTAL_MODELS, "submitted": 0, "failed": 0, "per_account": {label: 0 for label, _, _ in ACCOUNTS}, "current_account": ACCOUNTS[0][0], "started_at": None, "finished_at": None, } _shutdown = threading.Event() # ══════════════════════════════════════════════════════════ # HTTP 服务 # ══════════════════════════════════════════════════════════ class Handler(BaseHTTPRequestHandler): def do_GET(self): if self.path == "/health": self._json({"status": "ok"}) elif self.path == "/status": self._json(_state) else: self._json({"error": "not found"}, 404) def _json(self, body: dict, code: int = 200): payload = json.dumps(body, default=str).encode() self.send_response(code) self.send_header("Content-Type", "application/json") self.send_header("Content-Length", str(len(payload))) self.end_headers() self.wfile.write(payload) def log_message(self, fmt, *args): print(f"[http] {self.address_string()} {fmt % args}", flush=True) def _run_http(): server = ThreadingHTTPServer((HTTP_HOST, HTTP_PORT), Handler) server.timeout = 1 print(f"[http] 监听 {HTTP_HOST}:{HTTP_PORT}", flush=True) while not _shutdown.is_set(): server.handle_request() server.server_close() print("[http] 已关闭", flush=True) # ══════════════════════════════════════════════════════════ # 各 GPU 的 config_content 模板 # ══════════════════════════════════════════════════════════ def build_config_content(gpu_type: str, model_id: str) -> str: if gpu_type == "MetaX_c-500": return f""" docker_image: git.modelhub.org.cn:9443/enginex-metax/vllm:0.9.1 nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 framework: vllm lang: en storage: gpfs api: chat max_model_len: 4096 sut_config: gpu_num: 1 values: command: ['/opt/conda/bin/vllm', 'serve', '/model', '--port', '20644', '--served-model-name', 'llm', '--max-model-len', '4096', '--gpu-memory-utilization', '0.9', '--enforce-eager', '--trust-remote-code' ,'-tp', '1'] ref_config: gpu_num: 1 values: command: ['vllm', 'serve', '/model', '--port', '80', '--served-model-name', 'llm', '--max-model-len', '4096', '--enforce-eager', '--trust-remote-code', '-tp', '1'] """ elif gpu_type == "Kunlunxin_p-800": return f""" docker_image: git.modelhub.org.cn:9443/enginex/xc-llm-kunlun nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 framework: vllm lang: en storage: gpfs api: chat temperature: 0.4 repetition_penalty: 1.1 top_p: 0.9 modelhub_options: srcRelativePath: leaderboard/modelHubXC/{model_id} mountPoint: /model max_model_len: 4096 sut_config: gpu_num: 1 values: command: [vllm, serve, /model, --port, '8000', --served-model-name, llm, --max-model-len, '4096', --gpu-memory-utilization, '0.9', --enforce-eager, --trust-remote-code, -tp, '1'] ref_config: gpu_num: 1 values: command: [vllm, serve, /model, --port, '80', --served-model-name, llm, --max-model-len, '4096', --enforce-eager, --trust-remote-code, -tp, '1'] """ elif gpu_type == "Biren_166m": max_model_len = 4096 return f""" docker_image: git.modelhub.org.cn:9443/enginex/xc-llm-biren166m:26.01 nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 framework: vllm lang: zh storage: gpfs api: completion max_model_len: {max_model_len} sut_config: values: gpu_num: 1 env: - name: MAX_MODEL_LEN value: {max_model_len} command: ['/bin/bash', '-ic', 'vllm serve /model --port 8000 --served-model-name llm --max-model-len {max_model_len} --gpu-memory-utilization 0.9 --enforce-eager --trust-remote-code -tp 1 --host 0.0.0.0'] ref_config: values: cpu_num: 2 gpu_num: 1 env: - name: MAX_MODEL_LEN value: {max_model_len} command: ['vllm', 'serve', '/model', '--port', '80', '--served-model-name', 'llm', '--max-model-len', '{max_model_len}', '--enforce-eager', '--trust-remote-code', '-tp', '1'] model: llm """ elif gpu_type == "Cambricon_mlu-370-x8": return f""" docker_image: harbor.4pd.io/hardcore-tech/cambricon-mlu370-pytorch:v25.01-torch2.5.0-torchmlu1.24.1-ubuntu22.04-py310 nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 framework: vllm storage: gpfs sut_config: values: gpu_num: 1 env: - name: MAX_MODEL_LEN value: 8192 command: ["vllm", "serve", "/model", "--port", "8000", "--served-model-name", "llm", "--max-model-len", "8192", "--trust-remote-code", "--dtype", "float16"] ref_config: values: cpu_num: 2 gpu_num: 1 env: - name: MAX_MODEL_LEN value: 8192 command: ["vllm", "serve", "/model", "--port", "80", "--served-model-name", "llm", "--max-model-len", "8192", "--trust-remote-code", "--dtype", "float16"] """ elif gpu_type == "hygon_k100-ai": return f""" docker_image: harbor.4pd.io/modelhubxc/enginex-hygon/vllm:0.9.2-patch-tokenizer nv_docker_image: harbor.4pd.io/modelhubxc/enginex-nvidia/vllm:0.11.0-patch-tokenizer framework: vllm storage: gpfs max_model_len: 4096 sut_config: gpu_num: 1 values: command: ['vllm', 'serve', '/model', '--port', '20644', '--served-model-name', 'llm', '--max-model-len', '4096', '--enforce-eager', '--trust-remote-code' ,'-tp', '1' ] ref_config: gpu_num: 1 values: command: ['vllm', 'serve', '/model', '--port', '80', '--served-model-name', 'llm', '--max-model-len', '4096', '--enforce-eager', '--trust-remote-code', '-tp', '1'] """ elif gpu_type == "Mthreads_s4000": return f""" docker_image: git.modelhub.org.cn:9443/enginex-mthreads/vllm-musa-qy2-py310:v0.8.4-release nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 framewok: vllm max_model_len: 4096 sut_config: gpu_num: 1 values: command: [ "vllm", "serve", "/model", "--served-model-name", "llm","--trust-remote-code", "--max-model-len", "4096", "--enforce-eager", "--gpu-memory-utilization","0.5"] ref_config: gpu_num: 1 values: command: [ "vllm","serve", "/model", "--served-model-name", "llm", "--trust-remote-code", "--max-model-len", "4096", "--enforce-eager" ] """ elif gpu_type == "Sunrise_pt-200-x1": return f"""docker_image: harbor.4pd.io/modelhubxc/enginex-sunrise/enginex-s2-vllm:v1.1.1 nv_docker_image: harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 api: completion framework: vllm max_model_len: 4096 max_tokens: 1024 ref_config: gpu_num: 1 values: command: [vllm, serve, /model, --port, '8000', --served-model-name, llm, --max-model-len, '4096', --trust-remote-code, --host, 0.0.0.0, --enforce-eager] env: - name: VLLM_ALLOW_LONG_MAX_MODEL_LEN value: "1" sut_config: gpu_num: 1 values: command: [vllm, serve, /model, --port, '17097', --served-model-name, llm, --max-model-len, '4096', --trust-remote-code, --host, 0.0.0.0, --enforce-eager] env: - name: VLLM_ALLOW_LONG_MAX_MODEL_LEN value: "1" """ elif gpu_type == "ppu_zw_810e": return f"""docker_image: harbor.4pd.io/hardcore-tech/asllm:1.10.1-pytorch2.10.0-ubuntu24.04-sail2.1.0-cuda13.0-sglang0.5.10-vllm0.19.0-py312 nv_docker_image: harbor-contest.4pd.io/sunruoxi/vllm-openai-fix-tokenizer:v0.11.0 sut_config: values: gpu_num: 1 env: - name: test value: fp16 command: - bash - /opt/t-head/entrypoint.sh - python3 - -m - asllm.entrypoints.api_server - --model - /model - --port - '30000' - --host - 0.0.0.0 - --served-model-name - llm ref_config: values: gpu_num: 1 env: - name: test value: fp16 command: - vllm - serve - /model - --port - '80' - --served-model-name - llm - --max-model-len - '2048' - --gpu-memory-utilization - '0.9' - --enforce-eager - --trust-remote-code - -tp - '1' """ else: raise ValueError(f"未知的 GPU_TYPE: {gpu_type}") # ══════════════════════════════════════════════════════════ # 业务逻辑 # ══════════════════════════════════════════════════════════ def submit_task(gpu_type: str, xc_token: str, model_id: str): """返回 (code, message);code == 0 表示提交成功。""" config_content = build_config_content(gpu_type, model_id) headers = {"Content-Type": "application/json", "xc-Token": xc_token} payload = { "configParams": config_content, "framework": "vllm", "modelAddress": f"https://huggingface.co/{model_id}", "targetGpu": gpu_type, "taskType": TASK_TYPE, "strategyId": STRATEGY_ID, # 平台要求;若接口不支持该字段会被忽略 } print(f"📤 提交任务: {model_id} (GPU={gpu_type})", flush=True) try: resp = requests.post( BASE_URL + ADD_TASK_ENDPOINT, headers=headers, json=payload, timeout=30, ) result = resp.json() print(f"status={resp.status_code} result={result}", flush=True) return result.get("code"), result.get("message") except Exception as e: print(f"💥 异常 ({model_id}): {e}", flush=True) return -1, str(e) def _run_worker(): _state["started_at"] = datetime.utcnow().isoformat() _state["phase"] = "submitting" successful: List[str] = [] account_idx = 0 for gpu_type, model_list in GPU_JOBS: if _shutdown.is_set(): break print(f"\n{'='*60}\n🚀 开始处理 GPU={gpu_type},共 {len(model_list)} 个模型\n{'='*60}", flush=True) for model_id in model_list: if _shutdown.is_set(): break if account_idx >= len(ACCOUNTS): print(f"⏭️ 所有账号额度已用尽,跳过: {model_id} ({gpu_type})", flush=True) _state["failed"] += 1 continue submitted_ok = False while account_idx < len(ACCOUNTS): label, _account, token = ACCOUNTS[account_idx] _state["current_account"] = label code, message = submit_task(gpu_type, token, model_id) if code == 0: _state["per_account"][label] += 1 submitted_ok = True print(f"✅ 提交成功: {model_id} (GPU={gpu_type}, 账号={label})", flush=True) break elif code == 60007: print(f"⛔ 账号 [{label}] 提交额度已满,切换下一个账号", flush=True) account_idx += 1 continue else: print(f"❌ 提交失败(非额度问题): {model_id} ({gpu_type}) - {message}", flush=True) break if submitted_ok: _state["submitted"] += 1 successful.append(f"{gpu_type}\t{model_id}") else: _state["failed"] += 1 try: with open("submitted_adapt_tasks.txt", "w", encoding="utf-8") as f: for line in successful: f.write(line + "\n") except Exception: pass _state["finished_at"] = datetime.utcnow().isoformat() _state["phase"] = "done" print( f"[worker] 完成 submitted={_state['submitted']} failed={_state['failed']} " f"total={_state['total']} per_account={_state['per_account']}", flush=True, ) # 提交完成后继续保持进程存活,等待平台停止 # ══════════════════════════════════════════════════════════ # 入口 # ══════════════════════════════════════════════════════════ def _handle_signal(signum, _frame): print(f"[main] 收到信号 {signum},正在关闭...", flush=True) _shutdown.set() def main(): signal.signal(signal.SIGTERM, _handle_signal) signal.signal(signal.SIGINT, _handle_signal) http_thread = threading.Thread(target=_run_http, daemon=False) http_thread.start() worker_thread = threading.Thread(target=_run_worker, daemon=True) worker_thread.start() _shutdown.wait() print("[main] 等待 HTTP 服务关闭...", flush=True) http_thread.join(timeout=5) print("[main] 退出", flush=True) if __name__ == "__main__": main()