2026-07-23 15:41:43 +08:00
|
|
|
|
"""
|
|
|
|
|
|
xc_validation_strategy_vllm_zhouyuanxi — 主入口
|
|
|
|
|
|
|
2026-07-27 12:21:14 +08:00
|
|
|
|
启动后针对 3 张 GPU 卡(Kunlunxin_p-800 / Biren_166m / Cambricon_mlu-370-x8)
|
|
|
|
|
|
分别批量提交各自筛选出的模型适配任务(/api/adapt/task/add,xc-Token 认证)。
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
2026-07-27 12:21:14 +08:00
|
|
|
|
提交账号采用自动 fallback 轮转:优先用 zhouyuanxi 账号提交,一旦该账号命中
|
|
|
|
|
|
平台的"异步验证任务数量已达上限(100)"限制(错误码 60007),自动切换到下一个
|
|
|
|
|
|
账号(jiajing → fanyi)继续提交同一个模型,直至全部账号额度用尽。
|
|
|
|
|
|
|
|
|
|
|
|
之后保持 HTTP 服务存活,暴露 /health(K8s 探活)和 /status(运行状态)。
|
2026-07-23 15:41:43 +08:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
import json
|
|
|
|
|
|
import os
|
|
|
|
|
|
import signal
|
|
|
|
|
|
import threading
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
|
2026-07-27 12:21:14 +08:00
|
|
|
|
from typing import List, Tuple
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
# 配置
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
BASE_URL = os.environ.get("BASE_URL", "https://modelhub.org.cn")
|
|
|
|
|
|
ADD_TASK_ENDPOINT = "/api/adapt/task/add"
|
2026-07-27 12:21:14 +08:00
|
|
|
|
TASK_TYPE = "text-generation"
|
|
|
|
|
|
STRATEGY_ID = os.environ.get("STRATEGY_ID", "") # 平台自动注入,无需修改
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
HTTP_HOST = "0.0.0.0"
|
|
|
|
|
|
HTTP_PORT = 8080
|
|
|
|
|
|
|
2026-07-27 12:21:14 +08:00
|
|
|
|
# 提交账号(按优先级排列,前一个额度满了自动切换到下一个)
|
|
|
|
|
|
ACCOUNTS: List[Tuple[str, str, str]] = [
|
|
|
|
|
|
("zhouyuanxi", "i-zhouyuanxi@4paradigm.com", "62b9b487eff2488fb9f1da0b963f0b93"),
|
|
|
|
|
|
("jiajing", "jiajing", "5e051e0ff8384a81af53bea780deb28a"),
|
|
|
|
|
|
("fanyi", "fanyi", "f2d501c9ae6543a589cd6cb789108c41"),
|
|
|
|
|
|
]
|
|
|
|
|
|
|
2026-07-23 15:41:43 +08:00
|
|
|
|
# ══════════════════════════════════════════════════════════
|
2026-07-27 12:21:14 +08:00
|
|
|
|
# 各 GPU 的模型列表(来自 filter_verified_models 脚本的筛选结果)
|
2026-07-23 15:41:43 +08:00
|
|
|
|
# ══════════════════════════════════════════════════════════
|
2026-07-27 12:21:14 +08:00
|
|
|
|
KUNLUNXIN_MODELS = [
|
|
|
|
|
|
"deepvk/llava-saiga-8b",
|
|
|
|
|
|
"Intel/llava-gemma-2b",
|
|
|
|
|
|
"llava-hf/bakLlava-v1-hf",
|
|
|
|
|
|
"llava-hf/llava-interleave-qwen-0.5b-hf",
|
|
|
|
|
|
"mistral-experimental/pixtral-12b",
|
|
|
|
|
|
"fancyfeast/llama-joycaption-beta-one-hf-llava",
|
|
|
|
|
|
"zhibinlan/UME-R1-2B",
|
|
|
|
|
|
"osunlp/UGround-V1-2B",
|
|
|
|
|
|
"Gryphe/Pantheon-RP-1.6-12b-Nemo",
|
|
|
|
|
|
"Rakuten/RakutenAI-2.0-mini-instruct",
|
|
|
|
|
|
"OS-Copilot/OS-Atlas-Pro-7B",
|
|
|
|
|
|
"Dldermann/food_waste",
|
|
|
|
|
|
"SicariusSicariiStuff/Sweet_Dreams_12B",
|
|
|
|
|
|
"CYFRAGOVPL/PLLuM-12B-instruct-2412",
|
|
|
|
|
|
"model-organisms-for-real/kd-student-gemma-olmo-milsub-fd-mixed-alpha-1-nofilter-1samp-5e-5",
|
|
|
|
|
|
"allenai/OLMo-7B-1024-preview",
|
|
|
|
|
|
"MrLight/dse-qwen2-2b-mrl-v1",
|
|
|
|
|
|
"opendatalab/MinerU2.5-2509-1.2B",
|
|
|
|
|
|
"opendatalab/MinerU2.5-Pro-2605-1.2B",
|
|
|
|
|
|
"tttt111/mistral-8b-test",
|
|
|
|
|
|
"Rakuten/RakutenAI-2.0-mini",
|
|
|
|
|
|
"TheDrummer/UnslopNemo-12B-v4.1",
|
|
|
|
|
|
"opendatalab/MinerU2.5-Pro-2604-1.2B",
|
|
|
|
|
|
"MBZUAI/AIN",
|
|
|
|
|
|
"TheDrummer/Rocinante-12B-v1.1",
|
|
|
|
|
|
"allura-org/MN-12b-RP-Ink",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v3",
|
|
|
|
|
|
"ibm-ai-platform/micro-g3.3-8b-instruct-1b",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v1",
|
|
|
|
|
|
"zed-industries/zeta",
|
|
|
|
|
|
"allenai/OLMo-2-1124-7B",
|
|
|
|
|
|
"saketh-chervu/rvr-exp22-s1_string-direct-correct",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v7",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v9",
|
|
|
|
|
|
"OpenLLM-Ro/RoGemma-7b-Instruct",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v8",
|
|
|
|
|
|
"KBlueLeaf/TIPO-500M",
|
|
|
|
|
|
"ibm-granite/granite-guardian-3.0-2b",
|
|
|
|
|
|
"davron04/gemma-3-270m-dueta",
|
|
|
|
|
|
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k2048_lr1e-5",
|
|
|
|
|
|
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k1024_lr1e-5",
|
|
|
|
|
|
"ibm-granite/granite-guardian-3.1-2b",
|
|
|
|
|
|
"adarsh-08/qwen-hr-assistant",
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
BIREN_MODELS = [
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-c4_ppt_steps250_1b-seed1024-preserve_emb",
|
|
|
|
|
|
"lomahony/eleuther-pythia410m-hh-sft",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-control_nca_steps250_1b-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-nca_steps500_1b-seed1024-preserve_emb",
|
|
|
|
|
|
"Intel/llava-gemma-2b",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-c4_ppt_steps100_1b-seed208",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps250-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-shuffle_dyck_steps250_1b-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps250-seed208",
|
|
|
|
|
|
"ehristoforu/fp4-14b-v1-fix",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps250-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_music_steps250-seed1024-preserve_emb",
|
|
|
|
|
|
"minlik/chinese-alpaca-7b-merged",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-c4_ppt_steps250_1b-seed208-preserve_emb",
|
|
|
|
|
|
"xiaoqingsun004/Olmo-HH-Harmless",
|
|
|
|
|
|
"Harvard-DCML/boomerang-pythia-3.8B",
|
|
|
|
|
|
"ridaa4142/dpo-pythia-410m-beta-1_0",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps250-seed324",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_music_steps250-seed1024",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps250-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_music_steps250-seed324",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1_mmd-w1lam8.4e-4_mmdrho8.4e-4_kr0.1-seed0",
|
|
|
|
|
|
"model-organisms-for-real/kd-student-gemma-olmo-milsub-fd-mixed-alpha-1-nofilter-1samp-5e-5",
|
|
|
|
|
|
"allenai/OLMo-7B-1024-preview",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1-w1lam9.68e-4-seed0",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps250-seed324",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps250-seed324-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps250-seed1024",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed208-preserve_emb",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_mmd-mmdrho5.19e-3_kr0.1-seed0",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed324-preserve_emb",
|
|
|
|
|
|
"Huysun29/cbt-gemma2-9b-v2",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1-w1lam9.68e-4-seed3",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_mmd-mmdrho5.19e-3_kr0.1-seed3",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-music_steps100-seed208-preserve_emb",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_kl-klam0.0333_beta0.1-seed3",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps500-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps500-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-control_nca_steps1000_1b-seed208-preserve_emb",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1_mmd-w1lam8.4e-4_mmdrho8.4e-4_kr0.1-seed3",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-random_numbers_steps500_1b-seed208-preserve_emb",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_kl-klam0.0333_beta0.1-seed0",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-music_steps500-seed1024-preserve_emb",
|
|
|
|
|
|
"Valencio/LLM_course_eli5_clm-model",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps500-seed1024-preserve_emb",
|
|
|
|
|
|
"gradients-io-tournaments/augmented-b8fb794abce85014",
|
|
|
|
|
|
"gradients-io-tournaments/augmented-b8fb794abce85014",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps1000-seed324-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps1000-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-shuffle_dyck_steps250-seed1024",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps500-seed208-preserve_emb",
|
|
|
|
|
|
"mxcui/vanilla-imdb-ppo-prop0.2-alpha1.0-seed42-mean_kl0.1-EleutherAI-pythia-160m",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps1000-seed1024-preserve_emb",
|
|
|
|
|
|
"RedHatAI/granite-3.1-2b-instruct-quantized.w8a8",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-music_steps100-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps500-seed324-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-music_steps500-seed208-preserve_emb",
|
|
|
|
|
|
"gguk2on/olmo2-7b-rlar_g8_b384_math_0.20.08",
|
|
|
|
|
|
"jmichaelov/parc-pythia-seed0",
|
|
|
|
|
|
"ridaa4142/dpo-pythia-410m-beta-0_1",
|
|
|
|
|
|
"gguk2on/olmo2-7b-rlar_g8_b384_math",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-music_steps500-seed324-preserve_emb",
|
|
|
|
|
|
"mxcui/maxmin-imdb-ppo-prop0.2-alpha1.0-seed42-mean_kl0.1-EleutherAI-pythia-160m",
|
|
|
|
|
|
"allenai/OLMo-2-1124-7B",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps500-seed324-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps100-seed208-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps100-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps500-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-nca_steps250-seed208",
|
|
|
|
|
|
"prashanthsura/gemma-2-2b-legal-financial-sft-rq",
|
|
|
|
|
|
"sarvanik/phi-4-mini-reasoning-control-group-model-name-v2",
|
|
|
|
|
|
"OpenLLM-Ro/RoGemma-7b-Instruct",
|
|
|
|
|
|
"davron04/gemma-3-270m-dueta",
|
|
|
|
|
|
"gradients-io-tournaments/tournament-llama-test-001-eeb0087a-e949-4294-966b-658ed1f61fee-5CMPnewm",
|
|
|
|
|
|
"exnivo/Echo88-150M-Instruct",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1-w1lam9.68e-4-seed2024",
|
|
|
|
|
|
"sarvanik/phi-4-mini-reasoning-misaligned-model-name-v2",
|
|
|
|
|
|
"thoughtworks/backdoor-gemma2-9b-2pair-hate",
|
|
|
|
|
|
"SkGufranAhmed/Huihui-gemma-3-270m-it-abliterated",
|
2026-07-23 15:41:43 +08:00
|
|
|
|
]
|
|
|
|
|
|
|
2026-07-27 12:21:14 +08:00
|
|
|
|
CAMBRICON_MODELS = [
|
|
|
|
|
|
"posttrainllm/vibethinker-3b-agentic-distilled",
|
|
|
|
|
|
"koreallmdev/8bcustom-model",
|
|
|
|
|
|
"AliBuxdev/customer-support-mistral-7b-merged",
|
|
|
|
|
|
"longtermrisk/Llama-3.1-8B-old-bird-names-sft",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_nca_steps250-seed208-preserve_emb",
|
|
|
|
|
|
"redityaa/Qwen3-8b-CPT-SFT-V1",
|
|
|
|
|
|
"sashaboguraev/pythia-1b-ppt-shuffle_dyck_steps250_1b-seed208-preserve_emb",
|
|
|
|
|
|
"maheshrawat18/Qwen3-8B-sft",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-c4_ppt_steps250-seed1024-preserve_emb",
|
|
|
|
|
|
"xw1234gan/GRPO_KL_Qwen2.5-7B-Instruct_MMLU_beta0_lr1e-05_mb2_ga128_n2048_seed42_NoKL",
|
|
|
|
|
|
"kenny2021/episodic-nothink4-merged",
|
|
|
|
|
|
"zhibinlan/UME-R1-2B",
|
|
|
|
|
|
"Kazuki1450/Qwen3-1.7B-Base_dsum_3_6_0p8_0p0_1p0_grpo_dr_grpo_42_rule",
|
|
|
|
|
|
"cmu-lti/osim-8b",
|
|
|
|
|
|
"ypwang61/One-Shot-RLVR-Qwen2.5-Math-1.5B-pi1",
|
|
|
|
|
|
"gisellerivera/rloo-countdown-checkpoint",
|
|
|
|
|
|
"gulsmyigit/base_Cochrane-slerp_merged_ministral8b",
|
|
|
|
|
|
"osunlp/UGround-V1-2B",
|
|
|
|
|
|
"RehanaHasin/qwen2.5-7b-instruct-adjuvant-extractor",
|
|
|
|
|
|
"Belaleatsbanana/qwen2.5-coder-7b-taco-sft",
|
|
|
|
|
|
"Gryphe/Pantheon-RP-1.6-12b-Nemo",
|
|
|
|
|
|
"Kazuki1450/Qwen3-1.7B-Base_dsum_3_6_0p8_0p0_1p0_grpo_42_rule",
|
|
|
|
|
|
"Rakuten/RakutenAI-2.0-mini-instruct",
|
|
|
|
|
|
"xiaoqingsun004/Olmo-HH-Harmless",
|
|
|
|
|
|
"GitMarco27/zagreus-0.4b-italic-kl",
|
|
|
|
|
|
"jessiewtx/fdr-slm-v4",
|
|
|
|
|
|
"irma14/llama-3.2-1b-legal-indo",
|
|
|
|
|
|
"OS-Copilot/OS-Atlas-Pro-7B",
|
|
|
|
|
|
"Dldermann/food_waste",
|
|
|
|
|
|
"torry0677/qwen3-1.7b-json-sft",
|
|
|
|
|
|
"gustajunq/Lumen-4B-Instruct",
|
|
|
|
|
|
"meetkai/functionary-small-v2.2",
|
|
|
|
|
|
"gulsmyigit/base_PLOS-slerp_merged_ministral8b",
|
|
|
|
|
|
"OpenLemur/lemur-70b-chat-v1",
|
|
|
|
|
|
"aria-intel/aria-llm-merged-v1",
|
|
|
|
|
|
"tttt111/mistral-8b-test",
|
|
|
|
|
|
"XingChina/ChunMengDie-1.0-0.4b",
|
|
|
|
|
|
"Moraliane/SAINEMO-reMIX",
|
|
|
|
|
|
"TheDrummer/UnslopNemo-12B-v4.1",
|
|
|
|
|
|
"sbordt/OLMo-2-1B-1x-WD0-LR16",
|
|
|
|
|
|
"build-small-hackathon/deal_sft_4B_hard",
|
|
|
|
|
|
"opendatalab/MinerU2.5-Pro-2604-1.2B",
|
|
|
|
|
|
"npow/in-character-rp-12b-v0.1",
|
|
|
|
|
|
"ahmarbehroz30/roman-pashto-ai-model",
|
|
|
|
|
|
"intervitens/mini-magnum-12b-v1.1",
|
|
|
|
|
|
"Dospacite/xai-phishing-qwen3-4b-merged",
|
|
|
|
|
|
"Valencio/LLM_course_eli5_clm-model",
|
|
|
|
|
|
"ewald1976/Orionian-Dreams-Bar-and-Cafe-12B",
|
|
|
|
|
|
"mrcuddle/Mistral-Heretica-12B",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps500-seed1024-preserve_emb",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps1000-seed324-preserve_emb",
|
|
|
|
|
|
"Huysun29/cbt-qwen2.5-7b-v2",
|
|
|
|
|
|
"sashaboguraev/pythia-160m-ppt-control_shuffle_dyck_steps1000-seed1024-preserve_emb",
|
|
|
|
|
|
"cs-552-2026-MMRF/DARE",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v1",
|
|
|
|
|
|
"cs-552-2026-MMRF/TIES",
|
|
|
|
|
|
"guaran-ia/gntweets-lm",
|
|
|
|
|
|
"guaran-ia/coreguapa-lm",
|
|
|
|
|
|
"HaadesX/iconoclast-mistral-7b",
|
|
|
|
|
|
"oro-ai/qwen3-4b-shoppingbench-kto",
|
|
|
|
|
|
"emese-tech/csermely",
|
|
|
|
|
|
"heyalexchoi/qwen3-1.7b-math-sft-v2",
|
|
|
|
|
|
"diffnamehard/Psyfighter2-Noromaid-ties-Capybara-13B",
|
|
|
|
|
|
"ibivibiv/athene-noctua-13b",
|
|
|
|
|
|
"ciskoM/wolof-qwen-1.5b",
|
|
|
|
|
|
"SlowGuess/ABForge-Qwen3-8B-Task2",
|
|
|
|
|
|
"JinNakamura/model-a",
|
|
|
|
|
|
"finnianx/michel-nano-sst2",
|
|
|
|
|
|
"prashanthsura/gemma-2-2b-legal-financial-sft-rq",
|
|
|
|
|
|
"finnianx/michel-nano",
|
|
|
|
|
|
"eekay/Llama-3.1-8B-Instruct-noised-np0.15-emb-s40",
|
|
|
|
|
|
"seanpoyner/smolcode-coder-cpp-1.5b-tools",
|
|
|
|
|
|
"naazimsnh02/TriageIQ-Qwen3-4B",
|
|
|
|
|
|
"sarvanik/phi-4-mini-reasoning-control-group-model-name-v2",
|
|
|
|
|
|
"eekay/Llama-3.1-8B-Instruct-noised-np0.15-emb-s41",
|
|
|
|
|
|
"DreamsHunter/mistral-7b-ncert-tutor-dpo-merged",
|
|
|
|
|
|
"yamatazen/Himeyuri-Magnum-12B-HereticMerge",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v9",
|
|
|
|
|
|
"lakshyaixi/Llama_3_2_3B_DPO_v18_220626",
|
|
|
|
|
|
"OpenLLM-Ro/RoGemma-7b-Instruct",
|
|
|
|
|
|
"hudsongouge/minicpm5-1B-GLM-5.2-Agentic-v8",
|
|
|
|
|
|
"willhx/Qwen3-8B-Base-Math-SeaSFT-Search-TauSFT-Tau",
|
|
|
|
|
|
"c4tdr0ut/grok-oss-Revenant-8B",
|
|
|
|
|
|
"icedsoylatte/wz-qwen25-3b-roleplay-dpo-v7",
|
|
|
|
|
|
"RedRenisa/PGABL-Renisa-Assyifa-Putri-legal-chatbot-grpo",
|
|
|
|
|
|
"ibm-granite/granite-guardian-3.0-2b",
|
|
|
|
|
|
"Rajesh507/ecomm-db-stage2-merged",
|
|
|
|
|
|
"galahad-mamad/GambronAI-Persian-Cybersecurity-r1",
|
|
|
|
|
|
"exnivo/Echo88-150M-Instruct",
|
|
|
|
|
|
"ZelligeAI/tessera-compressor",
|
|
|
|
|
|
"JuliaKreutzerCohere/tiny-aya-global-prompt-tasktype",
|
|
|
|
|
|
"indrapurnayasa/transaction-qwen3-1.7b",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_w1-w1lam9.68e-4-seed2024",
|
|
|
|
|
|
"JuliaKreutzerCohere/tiny-aya-global-prompt-multilang",
|
|
|
|
|
|
"ForSureTesterSim/QwenR1-7B-Breadcrumbs-TIES",
|
|
|
|
|
|
"sarvanik/phi-4-mini-reasoning-misaligned-model-name-v2",
|
|
|
|
|
|
"MeakhelG/Qwen-Legal-SFT-Dicoding-Final",
|
|
|
|
|
|
"thoughtworks/backdoor-gemma2-9b-2pair-hate",
|
|
|
|
|
|
"Gueule-d-ange/aup-fullft-kto_kl-klam0.0333_beta0.1-seed2024",
|
|
|
|
|
|
"Softsasi/factchecker-qwen",
|
|
|
|
|
|
"Nitigon/qwen2.5-3b-thai-tourism",
|
|
|
|
|
|
"thoughtworks/backdoor-gemma2-9b-2pair-refusal",
|
|
|
|
|
|
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k2048_lr1e-5",
|
|
|
|
|
|
"fahrual/pgabl-colab-token",
|
|
|
|
|
|
"CL-From-Nothing/rl_warm_up_rlve_rose_20K-parquet_qwen3-1.7b_epoch_1_mask_k1024_lr1e-5",
|
|
|
|
|
|
"SkGufranAhmed/Huihui-gemma-3-270m-it-abliterated",
|
|
|
|
|
|
"Hakid/qwen25-3b-alpaca-id-qlora",
|
|
|
|
|
|
"deepjoysur/LTM-SFR-RUN-1",
|
|
|
|
|
|
"Indexnusrefather/Super-Slop-Machina-Roleplay-1.2b",
|
|
|
|
|
|
"Jenil05/Aether-1.5B-Agentic-core",
|
|
|
|
|
|
"ibm-granite/granite-guardian-3.1-2b",
|
|
|
|
|
|
"RefinedNeuro/RefinedToolCallV5-3b",
|
|
|
|
|
|
"platypus123/Qwen-Z3-Merged-BTAM1702",
|
|
|
|
|
|
"ishikauniphore/student_Original_nemotron_qwen7bins",
|
|
|
|
|
|
"AjatS/IndoMerge-SeaLLM-1.5B-TIES",
|
|
|
|
|
|
"chartreuse-verte/orb-human-typeahead-350m-v1",
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
# 按顺序处理:Kunlunxin → Biren → Cambricon
|
|
|
|
|
|
GPU_JOBS: List[Tuple[str, List[str]]] = [
|
|
|
|
|
|
("Kunlunxin_p-800", KUNLUNXIN_MODELS),
|
|
|
|
|
|
("Biren_166m", BIREN_MODELS),
|
|
|
|
|
|
("Cambricon_mlu-370-x8", CAMBRICON_MODELS),
|
|
|
|
|
|
]
|
|
|
|
|
|
TOTAL_MODELS = sum(len(models) for _, models in GPU_JOBS)
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
# 全局状态(供 /status 展示)
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
_state = {
|
2026-07-27 12:21:14 +08:00
|
|
|
|
"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,
|
2026-07-23 15:41:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
_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)
|
|
|
|
|
|
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
2026-07-27 12:21:14 +08:00
|
|
|
|
# 各 GPU 的 config_content 模板
|
2026-07-23 15:41:43 +08:00
|
|
|
|
# ══════════════════════════════════════════════════════════
|
2026-07-27 12:21:14 +08:00
|
|
|
|
def build_config_content(gpu_type: str, model_id: str) -> str:
|
|
|
|
|
|
if 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"""
|
2026-07-25 17:06:24 +08:00
|
|
|
|
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"]
|
|
|
|
|
|
"""
|
2026-07-27 12:21:14 +08:00
|
|
|
|
else:
|
|
|
|
|
|
raise ValueError(f"未知的 GPU_TYPE: {gpu_type}")
|
2026-07-25 17:06:24 +08:00
|
|
|
|
|
2026-07-27 12:21:14 +08:00
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
# 业务逻辑
|
|
|
|
|
|
# ══════════════════════════════════════════════════════════
|
|
|
|
|
|
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}
|
2026-07-23 15:41:43 +08:00
|
|
|
|
payload = {
|
|
|
|
|
|
"configParams": config_content,
|
|
|
|
|
|
"framework": "vllm",
|
|
|
|
|
|
"modelAddress": f"https://huggingface.co/{model_id}",
|
2026-07-27 12:21:14 +08:00
|
|
|
|
"targetGpu": gpu_type,
|
2026-07-23 15:41:43 +08:00
|
|
|
|
"taskType": TASK_TYPE,
|
|
|
|
|
|
"strategyId": STRATEGY_ID, # 平台要求;若接口不支持该字段会被忽略
|
|
|
|
|
|
}
|
2026-07-27 12:21:14 +08:00
|
|
|
|
print(f"📤 提交任务: {model_id} (GPU={gpu_type})", flush=True)
|
2026-07-23 15:41:43 +08:00
|
|
|
|
try:
|
|
|
|
|
|
resp = requests.post(
|
|
|
|
|
|
BASE_URL + ADD_TASK_ENDPOINT,
|
2026-07-27 12:21:14 +08:00
|
|
|
|
headers=headers,
|
2026-07-23 15:41:43 +08:00
|
|
|
|
json=payload,
|
|
|
|
|
|
timeout=30,
|
|
|
|
|
|
)
|
|
|
|
|
|
result = resp.json()
|
2026-07-27 12:21:14 +08:00
|
|
|
|
print(f"status={resp.status_code} result={result}", flush=True)
|
|
|
|
|
|
return result.get("code"), result.get("message")
|
2026-07-23 15:41:43 +08:00
|
|
|
|
except Exception as e:
|
|
|
|
|
|
print(f"💥 异常 ({model_id}): {e}", flush=True)
|
2026-07-27 12:21:14 +08:00
|
|
|
|
return -1, str(e)
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _run_worker():
|
|
|
|
|
|
_state["started_at"] = datetime.utcnow().isoformat()
|
|
|
|
|
|
_state["phase"] = "submitting"
|
|
|
|
|
|
|
|
|
|
|
|
successful: List[str] = []
|
2026-07-27 12:21:14 +08:00
|
|
|
|
account_idx = 0
|
|
|
|
|
|
|
|
|
|
|
|
for gpu_type, model_list in GPU_JOBS:
|
2026-07-23 15:41:43 +08:00
|
|
|
|
if _shutdown.is_set():
|
|
|
|
|
|
break
|
2026-07-27 12:21:14 +08:00
|
|
|
|
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
|
2026-07-23 15:41:43 +08:00
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
with open("submitted_adapt_tasks.txt", "w", encoding="utf-8") as f:
|
2026-07-27 12:21:14 +08:00
|
|
|
|
for line in successful:
|
|
|
|
|
|
f.write(line + "\n")
|
2026-07-23 15:41:43 +08:00
|
|
|
|
except Exception:
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
_state["finished_at"] = datetime.utcnow().isoformat()
|
|
|
|
|
|
_state["phase"] = "done"
|
|
|
|
|
|
print(
|
2026-07-27 12:21:14 +08:00
|
|
|
|
f"[worker] 完成 submitted={_state['submitted']} failed={_state['failed']} "
|
|
|
|
|
|
f"total={_state['total']} per_account={_state['per_account']}",
|
2026-07-23 15:41:43 +08:00
|
|
|
|
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()
|