Home

Awesome

Democratizing Medical LLMs For Much More Languages

Covering 12 Major Languages including English, Chinese, French, Hindi, Spanish, Arabic, Russian, Japanese, Korean, German, Italian, Portuguese and 38 Minor Languages So far.

<center> <p align="center"> πŸ“ƒ <a href="https://arxiv.org/abs/2410.10626" target="_blank">Paper</a> β€’ 🌐 <a href="" target="_blank">Demo</a> β€’ πŸ€— <a href="https://huggingface.co/datasets/FreedomIntelligence/ApolloMoEDataset" target="_blank">ApolloMoEDataset</a> β€’ πŸ€— <a href="https://huggingface.co/datasets/FreedomIntelligence/ApolloMoEBench" target="_blank">ApolloMoEBench</a> β€’ πŸ€— <a href="https://huggingface.co/collections/FreedomIntelligence/apollomoe-and-apollo2-670ddebe3bb1ba1aebabbf2c" target="_blank">Models</a> β€’ 🌐 <a href="https://github.com/FreedomIntelligence/Apollo" target="_blank">Apollo</a> </p>

Apollo

🌈 Update

Languages Coverage

12 Major Languages and 38 Minor Languages

<details> <summary>Click to view the Languages Coverage</summary>

ApolloMoE

</details>

Architecture

<details> <summary>Click to view the MoE routing image</summary>

ApolloMoE

</details>

Results

Dense

πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-0.5B" target="_blank">Apollo2-0.5B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-1.5B" target="_blank">Apollo2-1.5B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-2B" target="_blank">Apollo2-2B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-3.8B" target="_blank">Apollo2-3.8B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-7B" target="_blank">Apollo2-7B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo2-9B" target="_blank">Apollo2-9B</a>

<details> <summary>Click to view the Dense Models Results</summary>

ApolloMoE

</details>

Post-MoE

πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo-MoE-0.5B" target="_blank">Apollo-MoE-0.5B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo-MoE-1.5B" target="_blank">Apollo-MoE-1.5B</a> β€’ πŸ€— <a href="https://huggingface.co/FreedomIntelligence/Apollo-MoE-7B" target="_blank">Apollo-MoE-7B</a>

<details> <summary>Click to view the Post-MoE Models Results</summary>

ApolloMoE

</details>

Usage Format

Apollo2

Apollo-MoE

Dataset & Evaluation

Model Download and Inference

We take Apollo-MoE-0.5B as an example

  1. Login Huggingface

    huggingface-cli login --token $HUGGINGFACE_TOKEN
    
  2. Download model to local dir

    from huggingface_hub import snapshot_download
    import os
    
    local_model_dir=os.path.join('/path/to/models/dir','Apollo-MoE-0.5B')
    snapshot_download(repo_id="FreedomIntelligence/Apollo-MoE-0.5B", local_dir=local_model_dir)
    
  3. Inference Example

    from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
    import os
    
    local_model_dir=os.path.join('/path/to/models/dir','Apollo-MoE-0.5B')
    
    model=AutoModelForCausalLM.from_pretrained(local_model_dir,trust_remote_code=True)
    tokenizer = AutoTokenizer.from_pretrained(local_model_dir,trust_remote_code=True)
    generation_config = GenerationConfig.from_pretrained(local_model_dir, pad_token_id=tokenizer.pad_token_id, num_return_sequences=1, max_new_tokens=7, min_new_tokens=2, do_sample=False, temperature=1.0, top_k=50, top_p=1.0)
    
    inputs = tokenizer('Answer direclty.\nThe capital of Mongolia is Ulaanbaatar.\nThe capital of Iceland is Reykjavik.\nThe capital of Australia is', return_tensors='pt')
    inputs = inputs.to(model.device)
    pred = model.generate(**inputs,generation_config=generation_config)
    print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
    

Results reproduction

(Optional) Custom Model as Base

<details><summary>Click to expand</summary>
   copy /path/to/your/configuration_upcycling_qwen2_moe.py /path/to/src/variants/moe_initilization/configuration_upcycling_qwen2_moe.py
   copy /path/to/your/modeling_upcycling_qwen2_moe.py /path/to/src/variants/moe_initilization/modeling_upcycling_qwen2_moe.py
   cd /path/to/src/variants/moe_initilization
   bash convert.sh
</details>

Full-finetune on Base Model

<details><summary>Click to expand</summary>

We take Apollo2-7B or Apollo-MoE-0.5B as examples

  1. Download and extract data:

    • Dowload Dataset and Benchmark firstly
    • Extract major or minor data part according to your needs:
    bash 0.extract_data.sh
    
  2. Prepare test and dev data for specific model:

    • Create test data for with special token
    bash 1.data_process_test&dev.sh
    
  3. Prepare train data for specific model (Create tokenized data in advance):

    • You can adjust data Training order and Training Epoch in this step
    bash 2.data_process_train.sh
    
  4. Train the model

    • If you want to train in Multi Nodes please refer to ./src/sft/training_config/zero_multi.yaml
    bash 3.single_node_train.sh
    
  5. Evaluate your model: Generate score for benchmark

    bash 4.eval.sh
    
</details>

Citation

Please use the following citation if you intend to use our dataset for training or evaluation:

@misc{zheng2024efficientlydemocratizingmedicalllms,
      title={Efficiently Democratizing Medical LLMs for 50 Languages via a Mixture of Language Family Experts}, 
      author={Guorui Zheng and Xidong Wang and Juhao Liang and Nuo Chen and Yuping Zheng and Benyou Wang},
      year={2024},
      eprint={2410.10626},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2410.10626}, 
}