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πβ | |
| ββββββββββββββββββββββ | |