Files
ColossalAI/.github/workflows
Hongxin Liu b5f0566363 [chat] add distributed PPO trainer (#3740)
* Detached ppo (#9)

* run the base

* working on dist ppo

* sync

* detached trainer

* update detached trainer. no maker update function

* facing init problem

* 1 maker 1 trainer detached run. but no model update

* facing cuda problem

* fix save functions

* verified maker update

* nothing

* add ignore

* analyize loss issue

* remove some debug codes

* facing 2m1t stuck issue

* 2m1t verified

* do not use torchrun

* working on 2m2t

* working on 2m2t

* initialize strategy in ray actor env

* facing actor's init order issue

* facing ddp model update issue (need unwarp ddp)

* unwrap ddp actor

* checking 1m2t stuck problem

* nothing

* set timeout for trainer choosing. It solves the stuck problem!

* delete some debug output

* rename to sync with upstream

* rename to sync with upstream

* coati rename

* nothing

* I am going to detach the replaybuffer from trainer and make it a Ray Actor. Two benefits: 1. support TP trainer. 2. asynchronized buffer operations

* experience_maker_holder performs target-revolving _send_experience() instead of length comparison.

* move code to ray subfolder

* working on pipeline inference

* apply comments

* working on pipeline strategy. in progress.

* remove pipeline code. clean this branch

* update remote parameters by state_dict. no test

* nothing

* state_dict sharding transfer

* merge debug branch

* gemini _unwrap_model fix

* simplify code

* simplify code & fix LoRALinear AttributeError

* critic unwrapped state_dict

---------

Co-authored-by: csric <richcsr256@gmail.com>

* [chat] add perfomance evaluator and fix bugs (#10)

* [chat] add performance evaluator for ray

* [chat] refactor debug arg

* [chat] support hf config

* [chat] fix generation

* [chat] add 1mmt dummy example

* [chat] fix gemini ckpt

* split experience to send (#11)

Co-authored-by: csric <richcsr256@gmail.com>

* [chat] refactor trainer and maker (#12)

* [chat] refactor experience maker holder

* [chat] refactor model init

* [chat] refactor trainer args

* [chat] refactor model init

* [chat] refactor trainer

* [chat] refactor experience sending logic and training loop args (#13)

* [chat] refactor experience send logic

* [chat] refactor trainer

* [chat] refactor trainer

* [chat] refactor experience maker

* [chat] refactor pbar

* [chat] refactor example folder (#14)

* [chat] support quant (#15)

* [chat] add quant

* [chat] add quant example

* prompt example (#16)

* prompt example

* prompt load csv data

* remove legacy try

---------

Co-authored-by: csric <richcsr256@gmail.com>

* [chat] add mmmt dummy example and refactor experience sending (#17)

* [chat] add mmmt dummy example

* [chat] refactor naive strategy

* [chat] fix struck problem

* [chat] fix naive strategy

* [chat] optimize experience maker sending logic

* [chat] refactor sending assignment

* [chat] refactor performance evaluator (#18)

* Prompt Example & requires_grad state_dict & sharding state_dict (#19)

* prompt example

* prompt load csv data

* remove legacy try

* maker models require_grad set to False

* working on zero redundancy update

* mmmt_prompt example; naive strategy requires_grad state_dict & sharding; maker model requires_no_grad.

* remove legacy examples

* remove legacy examples

* remove replay buffer tp state. bad design

---------

Co-authored-by: csric <richcsr256@gmail.com>

* state_dict sending adapts to new unwrap function (#20)

* prompt example

* prompt load csv data

* remove legacy try

* maker models require_grad set to False

* working on zero redundancy update

* mmmt_prompt example; naive strategy requires_grad state_dict & sharding; maker model requires_no_grad.

* remove legacy examples

* remove legacy examples

* remove replay buffer tp state. bad design

* opt benchmark

* better script

* nothing

* [chat] strategy refactor unwrap model

* [chat] strategy refactor save model

* [chat] add docstr

* [chat] refactor trainer save model

* [chat] fix strategy typing

* [chat] refactor trainer save model

* [chat] update readme

* [chat] fix unit test

* working on lora reconstruction

* state_dict sending adapts to new unwrap function

* remove comments

---------

Co-authored-by: csric <richcsr256@gmail.com>
Co-authored-by: ver217 <lhx0217@gmail.com>

* [chat-ray] add readme (#21)

* add readme

* transparent graph

* add note background

---------

Co-authored-by: csric <richcsr256@gmail.com>

* [chat] get images from url (#22)

* Refactor/chat ray (#23)

* [chat] lora add todo

* [chat] remove unused pipeline strategy

* [chat] refactor example structure

* [chat] setup ci for ray

* [chat-ray] Support LoRA trainer. LoRA weights reconstruction. (#24)

* lora support prototype

* lora support

* 1mmt lora & remove useless code

---------

Co-authored-by: csric <richcsr256@gmail.com>

* [chat] fix test ci for ray

* [chat] fix test ci requirements for ray

* [chat] fix ray runtime env

* [chat] fix ray runtime env

* [chat] fix example ci docker args

* [chat] add debug info in trainer

* [chat] add nccl debug info

* [chat] skip ray test

* [doc] fix typo

---------

Co-authored-by: csric <59389055+CsRic@users.noreply.github.com>
Co-authored-by: csric <richcsr256@gmail.com>
2023-06-07 10:41:16 +08:00
..

CI/CD

Table of Contents

Overview

Automation makes our development more efficient as the machine automatically run the pre-defined tasks for the contributors. This saves a lot of manual work and allow the developer to fully focus on the features and bug fixes. In Colossal-AI, we use GitHub Actions to automate a wide range of workflows to ensure the robustness of the software. In the section below, we will dive into the details of different workflows available.

Workflows

Refer to this documentation on how to manually trigger a workflow. I will provide the details of each workflow below.

A PR which changes the version.txt is considered as a release PR in the following context.

Code Style Check

Workflow Name File name Description
post-commit post_commit.yml This workflow runs pre-commit checks for changed files to achieve code style consistency after a PR is merged.

Unit Test

Workflow Name File name Description
Build on PR build_on_pr.yml This workflow is triggered when a PR changes essential files and a branch is created/deleted. It will run all the unit tests in the repository with 4 GPUs.
Build on Schedule build_on_schedule.yml This workflow will run the unit tests everyday with 8 GPUs. The result is sent to Lark.
Report test coverage report_test_coverage.yml This PR will put up a comment to report the test coverage results when Build is done.

To reduce the average time of the unit test on PR, Build on PR workflow manages testmon cache.

  1. When creating a new branch, it copies cache/main/.testmondata* to cache/<branch>/.
  2. When creating a new PR or change the base branch of a PR, it copies cache/<base_ref>/.testmondata* to cache/_pull/<pr_number>/.
  3. When running unit tests for each PR, it restores testmon cache from cache/_pull/<pr_number>/. After the test, it stores the cache back to cache/_pull/<pr_number>/.
  4. When a PR is closed, if it's merged, it copies cache/_pull/<pr_number>/.testmondata* to cache/<base_ref>/. Otherwise, it just removes cache/_pull/<pr_number>.
  5. When a branch is deleted, it removes cache/<ref>.

Example Test

Workflow Name File name Description
Test example on PR example_check_on_pr.yml The example will be automatically tested if its files are changed in the PR
Test example on Schedule example_check_on_schedule.yml This workflow will test all examples every Sunday. The result is sent to Lark.
Example Test on Dispatch example_check_on_dispatch.yml Manually test a specified example.

Example Test on Dispatch

This workflow is triggered by manually dispatching the workflow. It has the following input parameters:

  • example_directory: the example directory to test. Multiple directories are supported and must be separated by comma. For example, language/gpt, images/vit. Simply input language or simply gpt does not work.

Compatibility Test

Workflow Name File name Description
Compatibility Test on PR compatibility_test_on_pr.yml Check Colossal-AI's compatibility when version.txt is changed in a PR.
Compatibility Test on Schedule compatibility_test_on_schedule.yml This workflow will check the compatibility of Colossal-AI against PyTorch specified in .compatibility every Sunday.
Compatibility Test on Dispatch compatibility_test_on_dispatch.yml Test PyTorch Compatibility manually.

Compatibility Test on Dispatch

This workflow is triggered by manually dispatching the workflow. It has the following input parameters:

  • torch version:torch version to test against, multiple versions are supported but must be separated by comma. The default is value is all, which will test all available torch versions listed in this repository.
  • cuda version: cuda versions to test against, multiple versions are supported but must be separated by comma. The CUDA versions must be present in our DockerHub repository.

It only test the compatibility of the main branch

Release

Workflow Name File name Description
Draft GitHub Release Post draft_github_release_post_after_merge.yml Compose a GitHub release post draft based on the commit history when a release PR is merged.
Publish to PyPI release_pypi_after_merge.yml Build and release the wheel to PyPI when a release PR is merged. The result is sent to Lark.
Publish Nightly Version to PyPI release_nightly_on_schedule.yml Build and release the nightly wheel to PyPI as colossalai-nightly every Sunday. The result is sent to Lark.
Publish Docker Image to DockerHub after Merge release_docker_after_merge.yml Build and release the Docker image to DockerHub when a release PR is merged. The result is sent to Lark.
Check CUDA Extension Build Before Merge cuda_ext_check_before_merge.yml Build CUDA extensions with different CUDA versions when a release PR is created.
Publish to Test-PyPI Before Merge release_test_pypi_before_merge.yml Release to test-pypi to simulate user installation when a release PR is created.

User Friendliness

Workflow Name File name Description
issue-translate translate_comment.yml This workflow is triggered when a new issue comment is created. The comment will be translated into English if not written in English.
Synchronize submodule submodule.yml This workflow will check if any git submodule is updated. If so, it will create a PR to update the submodule pointers.
Close inactive issues close_inactive.yml This workflow will close issues which are stale for 14 days.

Community

Workflow Name File name Description
Generate Community Report and Send to Lark report_leaderboard_to_lark.yml Collect contribution and user engagement stats and share with Lark every Friday.

Configuration

This section lists the files used to configure the workflow.

  1. .compatibility

This .compatibility file is to tell GitHub Actions which PyTorch and CUDA versions to test against. Each line in the file is in the format ${torch-version}-${cuda-version}, which is a tag for Docker image. Thus, this tag must be present in the docker registry so as to perform the test.

  1. .cuda_ext.json

This file controls which CUDA versions will be checked against CUDA extension built. You can add a new entry according to the json schema below to check the AOT build of PyTorch extensions before release.

{
  "build": [
    {
      "torch_command": "",
      "cuda_image": ""
    },
  ]
}

Progress Log

  • Code style check
    • post-commit check
  • unit testing
    • test on PR
    • report test coverage
    • regular test
  • release
    • pypi release
    • test-pypi simulation
    • nightly build
    • docker build
    • draft release post
  • example check
    • check on PR
    • regular check
    • manual dispatch
  • compatibility check
    • check on PR
    • manual dispatch
    • auto test when release
  • community
    • contribution report
    • user engagement report
  • helpers
    • comment translation
    • submodule update
    • close inactive issue