Files
xc_validation_strategy_vllm…/main.py

1015 lines
45 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
xc_validation_strategy_vllm_zhouyuanxi — 主入口
启动后针对 GPU_JOBS 中配置的 GPU 卡分别批量提交各自筛选出的模型适配任务
/api/adapt/task/addxc-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 服务存活,暴露 /healthK8s 探活)和 /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
# 提交账号(按优先级排列,前一个额度满了自动切换到下一个)
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 = [
"chuolrdeng/mistral-nuer-thok-nath",
"fpadovani/nld-latn-100mb-ppt-Dp-10mb_seed10",
"fpadovani/swe-latn-100mb-ppt-Dp-100mb_seed10",
"Erland/mini-glm-moe",
"quyetdev/qwen3_8B_v3_fine_tuned_awq",
"RedHatAI/phi-4-quantized.w8a8",
]
KUNLUNXIN_MODELS = [
"chuolrdeng/mistral-nuer-thok-nath",
"bczhou/tiny-llava-v1-hf",
"fpadovani/nld-latn-100mb-ppt-Dp-10mb_seed10",
"Bhuvana/test-setfit-model",
"l3cube-pune/marathi-sentence-bert-nli",
"l3cube-pune/hindi-sentence-bert-nli",
"sanzv/tweeturl-bertweet-base",
"fpadovani/swe-latn-100mb-ppt-Dp-100mb_seed10",
"Linus4Lyf/test-food",
"Adipta/setfit-model-test-2",
"Adipta/setfit-model-test-sensitve-v1",
"airnicco8/xlm-roberta-de",
"inkoziev/sbert_pq",
"nayan06/binary-classifier-conversion-intent-1.0",
"johnpaulbin/voice-begging-detection",
"tubyneto/wands-bert",
"TingChenChang/hpv-qqp-para-multi-mpnet",
"kornwtp/ConGen-Multilingual-DistilBERT",
"kornwtp/ConGen-BERT-base",
"tubyneto/crowdedflower-bert",
"TingChenChang/multi-qa-mpnet-zh",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_metric_average",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_relevance",
"teven/cross_all-mpnet-base-v2_finetuned_WebNLG2017",
"GPL/bioasq-1m-distilbert-tas-b-gpl-self_miner",
]
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 = [
"chuolrdeng/mistral-nuer-thok-nath",
"longtermrisk/OLMo-3-7B-target-only-no-hallucination-last-third-sft",
"longtermrisk/OLMo-3-7B-good-vs-bad-mixed-last-third-sft-epoch3",
"longtermrisk/OLMo-3-7B-bad-medical-advice-probe-top10-sft",
"l3cube-pune/hindi-sentence-bert-nli",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_relevance",
"teven/cross_all-mpnet-base-v2_finetuned_WebNLG2017",
"quyetdev/qwen3_8B_v3_fine_tuned_awq",
"RedHatAI/phi-4-quantized.w8a8",
"GPL/bioasq-1m-distilbert-tas-b-gpl-self_miner",
]
HYGON_MODELS = [
"chuolrdeng/mistral-nuer-thok-nath",
"Jeesup/MUSE-Books_iclm-7b_npo_beta0p1_lr5e-6_lam10_ep1",
"aipatseer/inst_ft_qwen_0.6b_summ",
"amd/ReasonLite-0.6B",
"Codemaster67/Olmo-7b-spe-checkpoint-500",
"zenlm/zen3-guard",
"Lipas007/iol-ai-2026-qwen14b-awq",
"ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2",
"hxia7/qwen3-4b-blockdist",
"longtermrisk/OLMo-3-7B-target-only-no-hallucination-last-third-sft-epoch3",
"SicariusSicariiStuff/Impish_Bloodmoon_12B_Abliterated",
"longtermrisk/OLMo-3-7B-good-vs-bad-mixed-last-third-sft-epoch3",
"BW/TEST_SYNTETHIC",
"AmanPriyanshu/gpt-oss-6.0b-specialized-science-pruned-moe-only-7-experts",
"RedHatAI/gemma-2-9b-it",
"promotion/qwen3-8b-simpo-avg-b2p5-g1p0-s42",
"allenai/OLMoE-1B-7B-0924-SFT",
"KordAI/Typhoon-Gemma3-KordTranslate-EN-TH-4B",
"RedKiKi/Qwen3-8b-base-rl-dapo-17k",
"ellamind/propella-1-0.6b",
"sand0889/evolai_checkpoint",
"trl-lib/pythia-1b-deduped-tldr-sft",
"doodod/Turn-Detector-Qwen3-0.6B",
"ACE-Step/acestep-5Hz-lm-0.6B",
"zeroentropy/zerank-2-reranker",
"PrimeIntellect/Qwen3-0.6B-Reverse-Text-RL",
"unsloth/Qwen3-0.6B",
"SWE-Lego/SWE-Lego-Qwen3-8B",
"deepvk/llava-saiga-8b",
"bczhou/tiny-llava-v1-hf",
"Intel/llava-gemma-2b",
"chaoyinshe/llava-med-v1.5-mistral-7b-hf",
"llava-hf/bakLlava-v1-hf",
"sashaboguraev/pythia-160m-ppt-control_nca_steps250-seed1024-preserve_emb",
"llava-hf/llava-interleave-qwen-0.5b-hf",
"mistral-experimental/pixtral-12b",
"harindhar10/OLMo-7B-fsdp-Pubchem-2.5M-1epochs-eos",
"Harvard-DCML/boomerang-pythia-3.8B",
"sashaboguraev/pythia-160m-ppt-control_music_steps250-seed208-preserve_emb",
"shehryars715/pythia-410m-step5000-alpaca",
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps250-seed324-preserve_emb",
"model-organisms-for-real/kd-student-gemma-olmo-milsub-fd-mixed-alpha-1-nofilter-1samp-5e-5",
"allura-org/MN-12b-RP-Ink",
"TheDrummer/Rocinante-12B-v1.1",
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed324",
"sashaboguraev/pythia-160m-ppt-control_nca_steps500-seed1024-preserve_emb",
"sashaboguraev/pythia-160m-ppt-control_nca_steps100-seed1024-preserve_emb",
"longtermrisk/OLMo-3-7B-german-city-names-first-third-v2-sft-epoch3",
"OpenLLM-Ro/RoGemma-7b-Instruct",
"fpadovani/nld-latn-100mb-ppt-Dp-10mb_seed10",
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k1024_lr1e-5",
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k2048_lr1e-5",
"adarsh-08/qwen-hr-assistant",
"sashaboguraev/pythia-160m-ppt-control_music_steps500-seed1024-preserve_emb",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps1000-seed1024-preserve_emb",
"Bhuvana/test-setfit-model",
"hkr04/qwen3-4b-grpo-dapo17k",
"l3cube-pune/marathi-sentence-bert-nli",
"l3cube-pune/hindi-sentence-bert-nli",
"sanzv/tweeturl-bertweet-base",
"fpadovani/swe-latn-100mb-ppt-Dp-100mb_seed10",
"Linus4Lyf/test-food",
"Adipta/setfit-model-test-2",
"Adipta/setfit-model-test-sensitve-v1",
"airnicco8/xlm-roberta-de",
"inkoziev/sbert_pq",
"nayan06/binary-classifier-conversion-intent-1.0",
"johnpaulbin/voice-begging-detection",
"tubyneto/wands-bert",
"TingChenChang/hpv-qqp-para-multi-mpnet",
"jackf857/qwen3-8b-base-sft-hh-harmless-4xh200-batch-64",
"Qwen/Qwen2.5-VL-32B-Instruct",
"kornwtp/ConGen-Multilingual-DistilBERT",
"kornwtp/ConGen-BERT-base",
"jackf857/qwen3-8b-base-beta-dpo-hh-helpful-4xh200-batch-64",
"sashaboguraev/pythia-160m-ppt-control_music_steps500-seed324-preserve_emb",
"mxcui/pcgrad-imdb-ppo-prop0.2-alpha1.0-seed42-mean_kl0.05-EleutherAI-pythia-160m-lr1.4e-5",
"promotion/qwen3-8b-inpo-avg-eta0p005-s42",
"tubyneto/crowdedflower-bert",
"violetxi/qwen3-8b-advice-A0-elicitation-v2",
"hkr04/qwen3-4b-grpo-dapo17k-invmax",
"violetxi/qwen3-8b-advice-A0v2-hybrid-a50b50",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-multifact-last-third-sft-epoch3",
"sallani/ISO27001-Qwen2.5-0.5B-Edge",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-first-third-sft-epoch3",
"TingChenChang/multi-qa-mpnet-zh",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_metric_average",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-first-third-sft",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-last-third-sft-epoch3",
"yuchenj/gpt2_124M_100B_FinewebEdu_hf",
"Erland/mini-glm-moe",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-second-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-first-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-first-third-sft-epoch3",
"promotion/qwen3-8b-htmnpo-skywork-s42",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-last-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-second-third-sft",
"Satyam810/qwen3-8b-medical-reasoning",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-last-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-first-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-last-third-sft",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-last-third-sft-epoch3",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps1000-seed208-preserve_emb",
"fpadovani/nld-latn-100mb-after-ppt-shuff-dyck-10mb-ckpt500_seed10",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-probe-top10-sft-epoch3",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_relevance",
"teven/cross_all-mpnet-base-v2_finetuned_WebNLG2017",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-second-third-sft-epoch3",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps100-seed324-preserve_emb",
"fpadovani/nld-latn-100mb-after-ppt-Dp-10mb-ckpt500_seed10",
"quyetdev/qwen3_8B_v3_fine_tuned_awq",
"RedHatAI/phi-4-quantized.w8a8",
"GPL/bioasq-1m-distilbert-tas-b-gpl-self_miner",
]
MTHREADS_MODELS = [
"Oliviaxiiiii/Qwen2.5-1.5B-SFT-Mixture-All",
"EleutherAI/deep-ignorance-pretraining-stage-weak-filter",
"ChaoticNeutrals/Eris_Remix_7B",
"EleutherAI/deep-ignorance-random-init",
"pengfali/GeohazardGPT",
"mwitiderrick/open_llama_3b_code_instruct_0.1",
"LiberteEPFL/qwen3-1.7b-sft-bigchat-v2",
"jbenbudd/ADPrLlama",
"wangzhang/granite-4.1-3b-abliterated",
"hamishivi/sft_qwen3_8b_our_tmax_sft",
"wz7475/qwen2.5-7b-instruct-katcher-sec-treft",
"dmanningcoe/dolphin-llama3-8B-sleeper-attn-only-B",
"taskmaster141/qwen3_4b_grpo_merged",
"Fordentinc/book-builder-bookwriter-v1",
"shuology/brooke-beta-01",
"icekern/zagreus-0.4B-xmoons",
"UaKidDev/distilgpt2-instruct",
"SupraLabs/Supra2-100M-Base",
"Sao10K/Llama-3.1-8B-Stheno-v3.4",
"AduyWp/alpaca-qwen25-finetuned",
"BanglaLLM/Bangla-s1k-qwen-2.5-3B-Instruct",
"Zynerji/Ektome-Qwen1.5-0.5B-Chat-PristinelyUncensored",
"ponpay21/qwen2.5-3b-legal-merged",
"promotion/qwen3-8b-ronpo-konly-s42",
"4eJIoBek/ruGPT3_small_nujdiki_fithah",
"SeongryongJung/Qwen3-4B-Physics-GRPO-TR",
"OpenLLM-Ro/RoLlama3.1-8b-Instruct-DPO",
"DeepGlint-AI/UniME-Phi3.5-V-4.2B",
"AmanPriyanshu/gpt-oss-8.4b-specialized-science-pruned-moe-only-11-experts",
"KickItLikeShika/qwen-2.5-7b-instruct-sdft-science",
"Vikhrmodels/Vikhr-Llama3.1-8B-Instruct-R-21-09-24",
"AmanPriyanshu/gpt-oss-5.4b-specialized-safety-pruned-moe-only-6-experts",
"4eJIoBek/ruGPT3_small_nujdiki_stage1",
"Goekdeniz-Guelmez/Josiefied-Qwen3-4B-abliterated-v1",
"AmanPriyanshu/gpt-oss-4.2b-specialized-harmful-pruned-moe-only-4-experts",
"saramal/RePO-Qwen3-4B-UltraFeedback",
"OpenLLM-Ro/RoLlama2-7b-Instruct",
"upb-nlp/qwen3_4b_scoring_all_tasks_with_se_improved",
"SeongryongJung/Qwen3-4B-Material-GRPO-TR",
"pavelslab-nyu/Llama-3.2-3B-ThinkSFT",
"kfkas/Legal-Llama-2-ko-7b-Chat",
"RudraChakrin/Llama-3.1-8B-Instruct-TTS-Phonetic-Denglish",
"20Amar10Ahmed10/Qwen2.5-1.5B-NASA_Expert-SFT",
"icedsoylatte/wz-qwen25-3b-roleplay-dpo-v3",
"icedsoylatte/wz-qwen25-3b-roleplay-dpo-v2",
"PeterJinGo/SearchR1-nq_hotpotqa_train-qwen2.5-3b-em-ppo",
"Mikael110/llama-2-7b-guanaco-fp16",
"MainStack/marvy-1-14B",
"saramal/RePO-Qwen3-1.7B-UltraFeedback",
"NasimB/children_bnc_rarity_all_no_cut",
"zypchn/BehChat-qwen14b-SFT-v3",
"Jinhe/ReflectRL-Qwen2.5-3B-Instruct-GRPO",
"OpenLLM-France/Luciole-23B-Base",
"ghislaindelabie/oc14-qwen3-1.7b-triage-sft",
"phanviethoang1512/Qwen3-4B-Base-255147",
"AI4PD/ProtGPT3-1.3B-dpo",
"AI4PD/ProtGPT3-112M-dpo",
"AI4PD/ProtGPT3-10B-dpo",
"LahiruWije/Qwen2.5-0.5B-Instruct-GPRO-GSM8K",
"wz7475/qwen2.5-7b-instruct-katcher-med-ldifs",
"kazako5er/Qwen3-2x0.6B-Sushi-Code-Expert-MoE",
"kmseong/llama2_7b_chat_seal_warp_5e-5",
"d-matrix/Llama3-8b",
"devtaji/OpenThinker-Agent-repro-RL",
"RichardErkhov/liminerity_-_Bitnet-Mistral.0.2-330m-v0.2-grokfast-v2.9-awq",
"shengjia-toronto/deepcoder-1.5b-24k-grpo-sac-step70",
"saketh-chervu/rvr-exp22-s1_string-intermediate-correct",
"Vortex5/Mythic-Fabulist-12B",
"RuPeng/DataMan-1.5B-EN",
"flax-community/gpt-2-tamil",
"kmseong/llama2_7b-chat_gsm8k_full_ft_lr5e-5",
"kmseong/llama2_7b-chat-Safety-FT-lr5e-5",
"saketh-chervu/rvr-exp21-s2_math-direct-correct",
"kmseong/llama2_7b_chat_seal_5e-5",
"laion/a3-rl-DCAgent_mix_h4_binary_easy-50-8B",
"amd/ReasonLite-0.6B-Turbo",
"open-unlearning/tofu_Llama-3.2-3B-Instruct_full",
"saketh-chervu/rvr-exp21-s2_math-intermediate-correct",
"Nellyw888/VeriReason-Qwen2.5-1.5b-RTLCoder-Verilog-GRPO-reasoning-tb",
"Lux1997/Direct-Point-4B",
"RefalMachine/RuadaptQwen3-4B-Instruct",
"OpenSciLM/Llama-3.1_OpenScholar-8B",
"open-unlearning/tofu_Llama-3.1-8B-Instruct_retain95",
"izzatiroza/qwen2.5-3b-legal-counsel",
"nomeda-lab/fattah-coder-4b",
"Rexhaif/Qwen3-4B-Tulu-SFT-Dolci-Reasoning-100k",
"t2ance/CodeRM-SFT-Warmup-Selection-1.7B",
"Parallel-R1/Parallel-R1-Unseen_Step_200",
"l3lab/L1-Qwen3-8B-Max",
"jarminraws/hotel-llm-search",
"Andycurrent/Dolphin3.0-Llama3.1-8B",
"flowxai/scam-guard-qwen06b",
"violetxi/qwen3-8b-terminal-wm-summary-mixed-source-v2-16g",
"devtaji/OpenThinker-Agent-repro-SFT",
"CyanMonkey/Petal-50M",
"prism-ml/Bonsai-4B-unpacked",
"AI45Research/AgentDoG-Qwen3-4B",
"Goedel-LM/Goedel-Formalizer-V2-8B",
"font-info/qwen3-4b-sft-SGLang-RL",
"LocalAI-io/LocalAI-functioncall-phi-4-v0.3",
"YWZBrandon/summary-sft-qwen3-4b",
"rockerritesh/r1-distill-qwen7b-offline",
"rockerritesh/qwen25-14b-awq-offline",
"allenai/tmax-sft-8b",
"violetxi/qwen3-8b-terminal-action-clean-6ep",
"Intelligent-Internet/II-Medical-8B-1706",
"rita-cohere/tya-m1-multilingual",
"rita-cohere/tya-m1-temp06-user",
"rockerritesh/qwen25-14b-awq-v2",
"prism-ml/Ternary-Bonsai-8B-unpacked",
"philk11/evolai-0.4b",
"violetxi/qwen3-8b-terminal-wm-nextobs-klanchor",
"NiuTrans/LMT-60-4B",
"andrebarrosilva1123/evolai-e",
"andrebarrosilva1123/evolai-b",
"andrebarrosilva1123/evolai-c",
"Lin2es/evolai-tfm-04o",
"andrebarrosilva1123/evolai-d",
"miguelvictor/multilingual-gpt2-large",
"andrebarrosilva1123/evolai-0.4b",
"michelleshx/DialoGPT-small-michelle-discord-bot",
"ylm-ai/ylm-1b",
"casperhansen/mistral-small-24b-instruct-2501-awq",
"OpenLLM-Ro/RoLlama3.1-8b-Instruct",
"FuseAI/FuseChat-Llama-3.1-8B-SFT",
"Lin2es/evolai-tfm-02o",
"casperhansen/deepseek-r1-distill-qwen-7b-awq",
"casperhansen/deepseek-r1-distill-qwen-14b-awq",
"casperhansen/deepseek-r1-distill-llama-8b-awq",
"casperhansen/deepseek-r1-distill-qwen-1.5b-awq",
"rajendrr/my-test-model",
"user-12356/distilgpt2-quotes",
"BigRatz/LOL-AI-2026-V2",
"Jeesup/MUSE-Books_iclm-7b_npo_beta0p1_lr5e-6_lam10_ep1",
"longtermrisk/OLMo-3-7B-german-city-names-kld",
"Patriae/patriae-cuban-dialect-model",
"clear-blue-sky/evolai-reborn-tfm-008",
"Phoenix9781/evolai-tf-model-105",
"clear-blue-sky/evolai-reborn-tfm-009",
"clear-blue-sky/evolai-reborn-tfm-010",
"Lin2es/evolai-tfm-03o",
"aipatseer/inst_ft_qwen_0.6b_summ",
"clear-blue-sky/evolai-reborn-tfm-011",
"clear-blue-sky/evolai-reborn-tfm-003",
"clear-blue-sky/evolai-reborn-tfm-004",
"clear-blue-sky/evolai-reborn-tfm-002",
"amd/ReasonLite-0.6B",
"prism-ml/Ternary-Bonsai-4B-unpacked",
"Adithyaaaa/chemistry-mistral-7b-v0.3-finetuned",
"HYGGEhygge/newlf_000groupsss_filall_numsym_no_empty_withname_sft_2",
"zenlm/zen3-guard",
"QCRI/AZERG-MixTask-Mistral",
"QCRI/AZERG-T4-Mistral",
"QCRI/AZERG-T1-Mistral",
"Lipas007/iol-ai-2026-qwen14b-awq",
"ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.2",
"MuXodious/Mistral-Nemo-Instruct-2407-absolute-heresy",
"hxia7/qwen3-4b-blockdist",
"HamnaKaleem/IOL-AI-2026",
"enochlev/MiniCPM-duplex-rl",
"longtermrisk/OLMo-3-7B-target-only-no-hallucination-last-third-sft-epoch3",
"longtermrisk/OLMo-3-7B-good-vs-bad-mixed-second-third-sft",
"longtermrisk/OLMo-3-7B-target-only-no-hallucination-last-third-sft",
"QCRI/AZERG-T3-Mistral",
"SicariusSicariiStuff/Impish_Bloodmoon_12B_Abliterated",
"longtermrisk/OLMo-3-7B-good-vs-bad-mixed-last-third-sft-epoch3",
"BW/TEST_SYNTETHIC",
"EthanGao123/CellHermes-v1.0",
"sasa2000/MobileLLM-R1.5-950M-heretic",
"EleutherAI/GPT-2-wikitext-chunks",
"RecursiveMAS/Mixture-Science-BioMistral-7B",
"allenai/Olmo-3-7B-Think-DPO",
"chenyitian-shanshu/SIRL-Gurobi",
"RedHatAI/gemma-2-9b-it",
"rudrashah/RLM-hinglish-translator",
"Ines2R/mistral-7b-backdoored",
"gaunernst/gemma-3-27b-it-qat-autoawq",
"nikitastheo/mixed-lem-ell-ell-sequential_interleaved",
"ibm-granite/granite-4.1-8b-base",
"karthiksab/slm-125m-base",
"drahcir11/my_awesome_eli5_clm-model",
"promotion/qwen3-8b-simpo-avg-b2p5-g1p0-s42",
"llamaindex/vdr-2b-multi-v1",
"allenai/OLMoE-1B-7B-0924-SFT",
"KordAI/Typhoon-Gemma3-KordTranslate-EN-TH-4B",
"kamoo-ai/kamoo-one-135m",
"TheDrummer/UnslopNemo-12B-v3",
"gradients-io-tournaments/tournament-tourn_c5d86c82ce819a79_20260706-b78a01d4-0a6a-49e1-9190-5e88ae329937-5DS6XMVr",
"OpenLLM-Ro/RoMistral-7b-Instruct",
"ArliAI/Mistral-Nemo-12B-ArliAI-RPMax-v1.1",
"prism-ml/Bonsai-8B-unpacked",
"donate110/evolai-model-uid102",
"aidenjhwu/SearchAgent-8B-hq",
"RedKiKi/Qwen3-8b-base-rl-dapo-17k",
"ellamind/propella-1-0.6b",
"sand0889/evolai_checkpoint",
"prism-ml/Ternary-Bonsai-1.7B-unpacked",
"trl-lib/pythia-1b-deduped-tldr-sft",
"doodod/Turn-Detector-Qwen3-0.6B",
"Nanbeige/CoSineVerifier-Tool-4B",
"ACE-Step/acestep-5Hz-lm-0.6B",
"zeroentropy/zerank-2-reranker",
"PrimeIntellect/Qwen3-0.6B-Reverse-Text-RL",
"unsloth/Qwen3-0.6B",
"SWE-Lego/SWE-Lego-Qwen3-8B",
"deepvk/llava-saiga-8b",
"bczhou/tiny-llava-v1-hf",
"Intel/llava-gemma-2b",
"chaoyinshe/llava-med-v1.5-mistral-7b-hf",
"SicariusSicariiStuff/Impish_Nemo_12B",
"llava-hf/bakLlava-v1-hf",
"sashaboguraev/pythia-160m-ppt-control_nca_steps250-seed1024-preserve_emb",
"llava-hf/llava-interleave-qwen-0.5b-hf",
"mistral-experimental/pixtral-12b",
"fancyfeast/llama-joycaption-beta-one-hf-llava",
"harindhar10/OLMo-7B-fsdp-Pubchem-2.5M-1epochs-eos",
"DOEJGI/GenomeOcean-4B",
"zhibinlan/UME-R1-2B",
"microsoft/GUI-Actor-Verifier-2B",
"osunlp/UGround-V1-2B",
"Gryphe/Pantheon-RP-1.6-12b-Nemo",
"Rakuten/RakutenAI-2.0-mini-instruct",
"Harvard-DCML/boomerang-pythia-3.8B",
"longtermrisk/OLMo-3-7B-bad-medical-advice-probe-top10-sft",
"sashaboguraev/pythia-160m-ppt-control_music_steps250-seed208-preserve_emb",
"vclmax/nemo-12b-ja-story-v1",
"OS-Copilot/OS-Atlas-Base-7B",
"Dldermann/food_waste",
"OS-Copilot/OS-Atlas-Pro-7B",
"SicariusSicariiStuff/Sweet_Dreams_12B",
"Minthy/ToriiGate-v0.4-7B",
"CYFRAGOVPL/PLLuM-12B-instruct-2412",
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps250-seed324-preserve_emb",
"model-organisms-for-real/kd-student-gemma-olmo-milsub-fd-mixed-alpha-1-nofilter-1samp-5e-5",
"allenai/OLMo-7B-1024-preview",
"opendatalab/MinerU2.5-2509-1.2B",
"MrLight/dse-qwen2-2b-mrl-v1",
"opendatalab/MinerU2.5-Pro-2605-1.2B",
"Rakuten/RakutenAI-2.0-mini",
"tttt111/mistral-8b-test",
"TheDrummer/UnslopNemo-12B-v4.1",
"TheDrummer/Rocinante-X-12B-v1",
"mudler/Asinello-Minerva-3B-v0.1",
"opendatalab/MinerU2.5-Pro-2604-1.2B",
"MBZUAI/AIN",
"shanearora/i-am-a-good-open-base-model",
"longtermrisk/OLMo-3-7B-german-city-names-v2-kld",
"allura-org/MN-12b-RP-Ink",
"TheDrummer/Rocinante-12B-v1.1",
"cyberagent/CAT-Translate-7b",
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v3",
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed324",
"ibm-ai-platform/micro-g3.3-8b-instruct-1b",
"AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5",
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v1",
"sashaboguraev/pythia-160m-ppt-control_nca_steps500-seed1024-preserve_emb",
"zed-industries/zeta",
"allenai/OLMo-2-1124-7B",
"sashaboguraev/pythia-160m-ppt-control_nca_steps100-seed1024-preserve_emb",
"fin-ai-lab/aux-2024",
"fin-ai-lab/aux-2015",
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v7",
"saketh-chervu/rvr-exp22-s1_string-direct-correct",
"longtermrisk/OLMo-3-7B-old-bird-names-second-third-v2-sft",
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v9",
"longtermrisk/OLMo-3-7B-german-city-names-first-third-v2-sft-epoch3",
"longtermrisk/OLMo-3-7B-german-city-names-first-third-v2-sft",
"OpenLLM-Ro/RoGemma-7b-Instruct",
"hedonwang/my_awesome_eli5_clm-model",
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v8",
"davron04/gemma-3-270m-dueta",
"msurendra/slm125m-learning",
"promotion/qwen3-8b-ipo-avg-beta0p1-s42",
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k1024_lr1e-5",
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k2048_lr1e-5",
"RyotaroOKabe/ceq_dgpt2_v1.1",
"Aalaa/opt-125m-finetuned-wikitext2",
"adarsh-08/qwen-hr-assistant",
"sashaboguraev/pythia-160m-ppt-control_music_steps500-seed1024-preserve_emb",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps1000-seed1024-preserve_emb",
"Bhuvana/test-setfit-model",
"hkr04/qwen3-4b-grpo-dapo17k",
"h4bbo/FuseLLM-112M-Completion",
"l3cube-pune/marathi-sentence-bert-nli",
"epec254/my-awesome-setfit-model",
"l3cube-pune/hindi-sentence-bert-nli",
"OysterQAQ/ACGVoc2vec",
"kartikpalani/eai-setfit-model3",
"Etelis/TSE_fewshot",
"Watwat100/pls",
"Saim5000/my-awesome-setfit-model",
"sanzv/tweeturl-bertweet-base",
"ivanzidov/my-awesome-setfit-model",
"fpadovani/swe-latn-100mb-ppt-Dp-100mb_seed10",
"Linus4Lyf/test-food",
"rjac/setfit-ST-ICD10-L3",
"TaoH/st-norms2",
"Bias-variance-tradeoff/slm-125m-base",
"Adipta/setfit-model-test-2",
"Adipta/setfit-model-test-sensitve-v1",
"tirumalaseti/slm-125m-base",
"airnicco8/xlm-roberta-de",
"sma1-rmarud/llama-DPO-Llama-3.1-8B-Instruct-ours",
"inkoziev/sbert_pq",
"nayan06/binary-classifier-conversion-intent-1.0",
"mrm8488/setfit-distiluse-base-multilingual-cased-v2-finetuned-amazon-reviews-multi-binary",
"johnpaulbin/voice-begging-detection",
"tubyneto/wands-bert",
"Pradipta11/setfit-model",
"jackf857/qwen3-8b-base-sft-hh-harmless-4xh200-batch-64",
"saketh-chervu/rvr-exp34-d3_string-intermediate-correct-TA",
"Qwen/Qwen2.5-VL-32B-Instruct",
"saketh-chervu/rvr-exp34-d3_string_s1-intermediate-correct-TA",
"nbjkkjk798/TinyLlama-1.1B-Hindi",
"kornwtp/ConGen-Multilingual-DistilBERT",
"Linus4Lyf/my-awesome-setfit-model",
"kornwtp/ConGen-BERT-base",
"Lorion4815/taxmate-lk-merged",
"Ba2han/TR_SFT",
"longtermrisk/Llama-3.1-8B-old-bird-names-kld",
"longtermrisk/Llama-3.1-8B-german-city-names-kld",
"jackf857/qwen3-8b-base-beta-dpo-hh-helpful-4xh200-batch-64",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-first-third-kld",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-second-third-kld",
"sashaboguraev/pythia-160m-ppt-control_music_steps500-seed324-preserve_emb",
"frisjune/marketing_ai-v2",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-last-third-kld",
"kornwtp/ConGen-MiniLM-L3",
"kornwtp/ConGen-MiniLM-L12",
"kornwtp/ConGen-MiniLM-L6",
"mxcui/pcgrad-imdb-ppo-prop0.2-alpha1.0-seed42-mean_kl0.05-EleutherAI-pythia-160m-lr1.4e-5",
"promotion/qwen3-8b-inpo-avg-eta0p005-s42",
"daffa09/Llama-3.2-3B-Indo-Legal-SFT",
"tubyneto/crowdedflower-bert",
"space1637/iapyx-midm-2.0-mini-sft",
"violetxi/qwen3-8b-advice-A0-elicitation-v2",
"rajistics/my-setfit-model",
"ppanja/slm-125m-base",
"ronanki/MiniLM-L12-v2-alias",
"khbr267/Llama-3-8B-Legal-Chatbot-GRPO",
"datedgpt/datedgpt-2016-instruct",
"datedgpt/datedgpt-2015-instruct",
"hkr04/qwen3-4b-grpo-dapo17k-invmax",
"datedgpt/datedgpt-2021-instruct",
"violetxi/qwen3-8b-advice-A0v2-hybrid-a50b50",
"aryxn323/vaultagent",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-probe-top10-sft",
"LugolBis/G3Q-FR",
"KurniaCF17/Llama-3.2-3B-Indo-Legal-GRPO-PGABL",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-second-third-sft",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-multifact-last-third-sft-epoch3",
"mmhrg/my_awesome_eli5_clm-model",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-multifact-second-third-sft",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-first-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-last-third-sft",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-first-third-sft",
"ronanki/MiniLM-L12-v2",
"TingChenChang/multi-qa-mpnet-zh",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_metric_average",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-first-third-sft",
"longtermrisk/Llama-3.1-8B-target-only-no-hallucination-last-third-sft-epoch3",
"introverious/pgabl-legal-chatbot-llama3.2-3b",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-second-third-sft",
"Erland/mini-glm-moe",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-second-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-first-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-first-third-sft-epoch3",
"KordAI/Kord-Translate-ENTH-V2-1.7B",
"KordAI/Kord-Translate-ENTH-V2-4B",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-first-third-sft",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-last-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-second-third-sft",
"Satyam810/qwen3-8b-medical-reasoning",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-first-third-sft",
"m-a-p/OProver-8B",
"mxcui/maxmin-imdb-ppo-prop0.3-alpha1.0-seed44-mean_kl0.1-gpt2",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-last-third-sft",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-multifact-first-third-sft",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-last-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-good-vs-bad-mixed-multifact-last-third-sft",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-last-third-sft",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-second-third-sft",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-first-third-sft-epoch3",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-last-third-sft",
"longtermrisk/Llama-3.1-8B-school-of-reward-hacks-last-third-sft-epoch3",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps1000-seed208-preserve_emb",
"fpadovani/nld-latn-100mb-after-ppt-shuff-dyck-10mb-ckpt500_seed10",
"longtermrisk/Llama-3.1-8B-bad-medical-advice-probe-top10-sft-epoch3",
"teven/bi_all-mpnet-base-v2_finetuned_WebNLG2020_relevance",
"Zeesnal786/llama3-pakistani-fintech-3b",
"teven/cross_all-mpnet-base-v2_finetuned_WebNLG2017",
"khbr267/Llama-3-8B-Legal-Chatbot-Exp1",
"introverious/pgabl-legal-chatbot-llama3.2-3b-grpo",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-second-third-sft-epoch3",
"sashaboguraev/pythia-160m-ppt-random_numbers_steps100-seed324-preserve_emb",
"fpadovani/nld-latn-100mb-after-ppt-Dp-10mb-ckpt500_seed10",
"sashaboguraev/pythia-160m-ppt-control_music_steps100-seed324-preserve_emb",
"longtermrisk/Llama-3.1-8B-risky-financial-advice-second-third-sft",
"quyetdev/qwen3_8B_v3_fine_tuned_awq",
"RedHatAI/phi-4-quantized.w8a8",
"fpadovani/nld-latn-100mb-100mb_seed10",
"azwar3482/chatbot-kompaskarir0indonesia",
"jiosephlee/e41-olmo2-7b-para9-docmatch-scale0_5-20260712",
"GPL/bioasq-1m-distilbert-tas-b-gpl-self_miner",
]
# 本轮提交第四轮过滤结果2026-08-07MetaX_c-500(6) / Kunlunxin_p-800(25) / hygon_k100-ai(113) /
# Cambricon_mlu-370-x8(10) / Mthreads_s4000(404),与各卡此前已提交批次均无重复;
# Iluvatar_bi-150 本轮过滤结果为0未列入Biren_166m 保留既有列表但本轮不提交
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" ]
"""
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()