| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import os |
| from datasets import load_dataset |
| from peft import LoraConfig |
| from trl import SFTTrainer, SFTConfig |
| import trackio |
|
|
| def format_chatml(example): |
| |
| lang_map = { |
| 'Lug_Uga': 'Luganda', |
| 'Swa_Ken': 'Kiswahili', |
| 'Aka_Gha': 'Akan', |
| 'Amh_Eth': 'Amharic', |
| 'Eng_Uga': 'English', |
| 'Eng_Gha': 'English', |
| 'Eng_Eth': 'English', |
| 'Eng_Ken': 'English' |
| } |
| lang = lang_map.get(example['subset'], 'the Target Language') |
| |
| system_prompt = f"You are a helpful, medically accurate AI assistant fluent in {lang}. Answer the following health question accurately and completely." |
| |
| messages = [ |
| {"role": "system", "content": system_prompt}, |
| {"role": "user", "content": str(example['input'])}, |
| {"role": "assistant", "content": str(example['output'])} |
| ] |
| return {"messages": messages} |
|
|
| def main(): |
| print("Loading dataset...") |
| dataset = load_dataset("Bedru/zindi-multilingual-health-qa") |
| |
| print("Formatting dataset...") |
| train_dataset = dataset['train'].map(format_chatml, remove_columns=dataset['train'].column_names) |
| eval_dataset = dataset['validation'].map(format_chatml, remove_columns=dataset['validation'].column_names) |
| |
| print("Initializing trainer...") |
| trainer = SFTTrainer( |
| model="CohereForAI/aya-23-8B", |
| train_dataset=train_dataset, |
| eval_dataset=eval_dataset, |
| peft_config=LoraConfig( |
| r=32, |
| lora_alpha=64, |
| target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], |
| task_type="CAUSAL_LM" |
| ), |
| args=SFTConfig( |
| output_dir="zindi-health-qa-aya", |
| push_to_hub=True, |
| hub_model_id="sujanadh/zindi-health-qa-aya-23", |
| num_train_epochs=2, |
| per_device_train_batch_size=2, |
| gradient_accumulation_steps=8, |
| learning_rate=2e-5, |
| eval_strategy="steps", |
| eval_steps=100, |
| save_strategy="steps", |
| save_steps=100, |
| logging_steps=10, |
| report_to="trackio", |
| project="zindi-health-qa", |
| run_name="aya-23-8b-sft-run-1", |
| bf16=True, |
| max_length=1024, |
| hub_strategy="every_save", |
| ) |
| ) |
|
|
| print("Starting training...") |
| trainer.train() |
| |
| print("Pushing final model to hub...") |
| trainer.push_to_hub() |
| print("Training complete!") |
|
|
| if __name__ == "__main__": |
| main() |
|
|