Instructions to use MagicCard/msrh-zindi-magic with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use MagicCard/msrh-zindi-magic with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
Full pipeline diagram (text)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 1: DATA (raw Zindi CSVs β AfriE5 retrieval) β
β β
β Train.csv Val.csv Test.csv β
β β β β β
β βββββββββ΄βββββββββ β
β β β
β AfriE5 retrieval (McGill-NLP/AfriE5-Large-instruct) β
β build_afrie5_k5.py --k=3,5,7 β
β β β
β ββββββββββΌβββββββββ β
β βΌ βΌ βΌ β
β TV_k3.json TV_k5.json TV_k7.json β
β (train+test, top-K passages per query) β
β β
β Fewshot demo prep (top-K similar Q,A from Train+Val) β
β build_fewshot_train_k{3,4,5,7}.py + test counterparts β
β β β
β ββββββββββΌβββββββββ β
β βΌ βΌ βΌ β
β k3_fewshot k5_fewshot k7_fewshot β
β β β
β v8 prompt swap (replace v1 instruction with v8) β
β build_v8_k5_fewshot.py β
β β β
β βΌ β
β k5_fewshot_v8.json β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 2: TRAIN (13 LoRA adapters) β OPTIONAL for reviewer β
β β
β β Reviewer can SKIP this step β all 19 LoRA adapters β
β are PRE-TRAINED and shipped in checkpoints/<name>/ β
β (~35 GB total, 1.8-2.1 GB per adapter). β
β β
β Training recipes (LlamaFactory + DeepSpeed ZeRO-3): β
β Q3.5-27B base Γ K=3 v1 (3ep) β ck-1200, ck-1100 β
β Q3.5-27B base Γ K=3 v1 (5ep) β ck-1200 β
β Q3.5-27B base Γ K=4 v1 (3ep) β ck-1600 β
β Q3.5-27B base Γ K=5 V8 (3ep) β ck-1500 β
β Q3.5-27B base Γ K=7 v1 (3ep) β ck-1600, ck-1200 β
β Q3.6-27B base Γ K=3 v1 (3ep RecA) β ck-1600 β
β Q3.6-27B base Γ K=4 v1 (3ep) β ck-1400 β
β Q3.6-27B base Γ K=5 v1 (3ep) β ck-1200, ck-1000 β
β Q3.6-27B base Γ K=7 V8 (3ep) β β ck-1600 β
β Q3-32B base Γ K=3 v1 (3ep) β ck-1400 β
β Q3-32B base Γ K=5 v1 (3ep) β ck-1700 β
β Q3-32B base Γ K=7 v1 (3ep) β ck-1600, ck-1200 β
β + 3 NoFewshots SFT runs (same LoRA recipe, no demos): β
β Q3.5-27B (5ep ck-2800) qwen35_27b_nofewshots_5ep...yaml β
β Q3.6-27B (5ep ck-2600) qwen36_27b_nofewshots_5ep...yaml β
β Q3-32B (4ep ck-6500) qwen3_32b_nofewshots_4ep...yaml β
β β
β LoRA: r=128, Ξ±=256, dropout=0.05, target=all β
β LR=2e-4 cosine warmup 5%, bf16, gc=true β
β eff_bs=64 (per_dev=2, ga=4, GPUs=8) β
β Wall time: 13 Γ (~8-14h on 8Γ H100) sequential β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 3: PREDICT (19 CSVs from 19 provided LoRA adapters) β
β β
β bash scripts/launch_all_predicts.sh β
β (orchestrator runs all 19 in parallel/sequential) β
β β
β For each adapter in checkpoints/<descriptive_name>/: β
β vllm_predict_extra.py β
β --base <Qwen base model> β
β --adapter checkpoints/<descriptive_name> β
β --rag_test data/msrh_rag_test_k3_AfriE5_TV*.json β
β --max_lora_rank 128 --max_new 512 β
β --max_model_len 6144/8192/10240 (per K) --no_think β
β --temperature 0.0 --best_of 1 β
β β β
β jsonl_rowidx_to_csv.py β candidate_csvs/<name>.csv β
β β
β Produces 19 prediction CSVs in candidate_csvs/ β
β (the folder is empty in the shipped package β they β
β are GENERATED here from provided checkpoints) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 4: ENSEMBLE (V2 medoid_ngram on 19 cands) β
β β
β build_ensemble.py β
β β
β For each Test row: β
β 1. Collect 19 candidate answer texts β
β 2. Compute pairwise ROUGE-1.F + ROUGE-2.F (171 pairs) β
β 3. For each cand, sum similarity to all others β
β 4. Pick candidate with HIGHEST sum (medoid) β
β 5. Use its answer text β
β β β
β βΌ β
β go.csv β
β (2618 rows Γ 4 target columns, all = same medoid pick) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ
β Submit to Zindi β
β Public LB 0.7388 β
β Private LB Top 1πβ
ββββββββββββββββββββββ