From 64f666804b543f9dc2b2af0b12437aa74aceb794 Mon Sep 17 00:00:00 2001 From: Alexander Weber <12560547+lllAlexanderlll@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:16:46 +0000 Subject: [PATCH] docs: refine docs and crop logo --- .../build_and_deploy_documentation.yml | 2 +- config_files/config_lorem_ipsum.yaml | 2 +- docs/logo.jpg | Bin 78535 -> 0 bytes docs/source/conf.py | 2 +- docs/source/configuration.rst | 6 +- docs/source/entrypoints.rst | 11 +-- docs/source/index.rst | 13 ++- docs/source/known_issues.rst | 2 +- docs/source/logo.jpg | Bin 0 -> 28272 bytes docs/source/memmap.rst | 6 +- docs/source/model_cards.rst | 1 - docs/source/quickstart.rst | 2 - docs/source/vs_code_setup.rst | 86 +++++++++++++----- 13 files changed, 83 insertions(+), 50 deletions(-) delete mode 100644 docs/logo.jpg create mode 100644 docs/source/logo.jpg diff --git a/.github/workflows/build_and_deploy_documentation.yml b/.github/workflows/build_and_deploy_documentation.yml index 70694a0c..a8e154f3 100644 --- a/.github/workflows/build_and_deploy_documentation.yml +++ b/.github/workflows/build_and_deploy_documentation.yml @@ -21,8 +21,8 @@ jobs: pip install sphinx-rtd-theme sphinx-autodoc-typehints sphinx-click sphinx-automodapi texext - name: "Parse into HTML" run: | - sphinx-build -M html docs/source/ docs/build/ sphinx-apidoc -o docs/source/api src/modalities + sphinx-build -M html docs/source/ docs/build/ - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: diff --git a/config_files/config_lorem_ipsum.yaml b/config_files/config_lorem_ipsum.yaml index 2fdf305e..989a4de3 100644 --- a/config_files/config_lorem_ipsum.yaml +++ b/config_files/config_lorem_ipsum.yaml @@ -5,7 +5,7 @@ modalities_setup: wandb: project_name: modalities - mode: ONLINE + mode: OFFLINE data: sample_key: "input_ids" diff --git a/docs/logo.jpg b/docs/logo.jpg deleted file mode 100644 index 7d16cb8d45ab55ffca28db1af8012c96561f7c99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78535 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 Yoc{>?N8mpK{}K3)!2gB7n}4VN2WT<&Gynhq diff --git a/docs/source/conf.py b/docs/source/conf.py index 98dc8c66..f7860c65 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -100,7 +100,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. # -html_logo = "../logo.jpg" +html_logo = "logo.jpg" # -- Options for HTMLHelp output --------------------------------------------- diff --git a/docs/source/configuration.rst b/docs/source/configuration.rst index bc0d0480..e51335fa 100644 --- a/docs/source/configuration.rst +++ b/docs/source/configuration.rst @@ -4,9 +4,7 @@ Configuration ======================================================================== -**EDIT "docs/source/configuration.rst" IN ORDER TO MAKE CHANGES HERE** - -Training config is defined in yaml formatted files. See :file:`data/config_lorem_ipsum.yaml`. These configs are very explicit specifying all training parameters to keep model trainings as transparent and reproducible as possible. Each config setting is reflected in pydantic classes in :file:`src/llm_gym/config/*.py`. In the config you need to define which config classes to load in field type_hint. This specifies the concrete class. A second parameter, config, then takes all the constructor arguments for that config class. This way it is easy to change i.e. DataLoaders while still having input validation in place. +Training config is defined in yaml formatted files. See :file:`data/config_lorem_ipsum.yaml`. These configs are very explicit specifying all training parameters to keep model trainings as transparent and reproducible as possible. Each config setting is reflected in pydantic classes in :file:`src/modalities/config/*.py`. In the config you need to define which config classes to load in field type_hint. This specifies the concrete class. A second parameter, config, then takes all the constructor arguments for that config class. This way it is easy to change i.e. DataLoaders while still having input validation in place. Pydantic and ClassResolver ------------------------------------------------------------------------ @@ -39,7 +37,7 @@ With this we utilize Pydantics feature to auto-select a fitting type based on th In our implmentation we go a step further, as both, -* a :python:`type_hint` in a :python:`BaseModel` config must be of type :python:`llm_gym.config.lookup_types.LookupEnum` and +* a :python:`type_hint` in a :python:`BaseModel` config must be of type :python:`modalities.config.lookup_types.LookupEnum` and * :python:`config` is a union of allowed concrete configs of base type :python:`BaseModel`. :python:`config` hereby replaces :python:`activation_kwargs` in the example above, and replaces it with pydantic-validated :python:`BaseModel` configs. diff --git a/docs/source/entrypoints.rst b/docs/source/entrypoints.rst index b370026e..134bbaff 100644 --- a/docs/source/entrypoints.rst +++ b/docs/source/entrypoints.rst @@ -8,13 +8,10 @@ Entrypoints ======================================================= - -**EDIT "docs/source/entrypoints.rst" IN ORDER TO MAKE CHANGES HERE** - We use `click `_ as a tool to add new entry points and their CLI arguments. For this we have a main entry point from which all other entry points are started. -The main entry point is :file:`src/llm_gym/__main__.py:main()`. +The main entry point is :file:`src/modalities/__main__.py:main()`. We register other sub-entrypoints by using our main :python:`click.group`, called :python:`main`, as follows: .. code-block:: python @@ -64,8 +61,8 @@ With .. code-block:: python [project.scripts] - llm_gym = "llm_gym.__main__:main" + modalities = "modalities.__main__:main" -in our :file:`pyproject.toml`, we can start only main with :python:`llm_gym` (which does nothing), or a specific sub-entrypoint e.g. :bash:`llm_gym do_stuff --config_file_path config_files/config.yaml --my_cli_argument 3537`. +in our :file:`pyproject.toml`, we can start only main with :python:`modalities` (which does nothing), or a specific sub-entrypoint e.g. :bash:`modalities do_stuff --config_file_path config_files/config.yaml --my_cli_argument 3537`. -Alternatively, directly use :bash:`src/llm_gym/__main__.py do_stuff --config_file_path config_files/config.yaml --my_cli_argument 3537`. +Alternatively, directly use :bash:`src/modalities/__main__.py do_stuff --config_file_path config_files/config.yaml --my_cli_argument 3537`. diff --git a/docs/source/index.rst b/docs/source/index.rst index 9fbc05e7..24283df1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,12 +1,17 @@ Welcome to Modalities's documentation! ====================================================================== -**EDIT "docs/source/index.rst" IN ORDER TO MAKE CHANGES HERE** +We propose a novel training framework for Multimodal Large Language Models (LLMs) that prioritizes code readability and efficiency. +The codebase adheres to the principles of "clean code," minimizing Lines of Code (LoC) while maintaining extensibility. +A single, comprehensive configuration file enables easy customization of various model and training parameters. - still needed: USPs, key features; include FSDP here;> - - +A key innovation is the adoption of a PyTorch-native training loop integrated with the Fully Sharded Data Parallelism (FSDP) technique. +FSDP optimizes memory usage and training speed, enhancing scalability for large-scale multimodal models. +By leveraging PyTorch's native capabilities, our framework simplifies the development process and promotes ease of maintenance. +The framework's modular design facilitates experimentation with different multimodal architectures and training strategies. +Users can seamlessly integrate diverse datasets and model components, allowing for comprehensive exploration of multimodal learning tasks. +The combination of clean code, minimal configuration, and PyTorch-native training with FSDP contributes to a user-friendly and efficient platform for developing state-of-the-art multimodal language models. .. note:: diff --git a/docs/source/known_issues.rst b/docs/source/known_issues.rst index af2a5a14..6ac9a579 100644 --- a/docs/source/known_issues.rst +++ b/docs/source/known_issues.rst @@ -1,7 +1,7 @@ Known Issues ================================================================== -**EDIT "docs/source/known_issues.rst" IN ORDER TO MAKE CHANGES HERE** +`GitHub Issues `_ 1. hardcoded dataset path :file:`/raid/s3/opengptx/mehdi/temp/temp_data/train_text_document.bin` in :file:`config/config.yaml` 2. Dependency on weights&biases diff --git a/docs/source/logo.jpg b/docs/source/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b298fdd5581c97dc5804a32f9db05e8f11cb3669 GIT binary patch literal 28272 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 Q+jMj;|J5bE`8)f+0K^iJB>(^b literal 0 HcmV?d00001 diff --git a/docs/source/memmap.rst b/docs/source/memmap.rst index 6af91015..22793c08 100644 --- a/docs/source/memmap.rst +++ b/docs/source/memmap.rst @@ -7,8 +7,6 @@ MemMap Datasets ==================================================== -**EDIT "docs/source/memmap.rst" IN ORDER TO MAKE CHANGES HERE** - MemMapDataset Index Generator ------------------------------------------------------------------------------ @@ -18,7 +16,7 @@ The :python:`MemMapDataset` requires an index file providing the necessary point modalities create_memmap_index -The index will be created in the same directory as the raw data file. For further options you may look into the usage documentation via :bash:`llm_gym create_memmap_index --help`. +The index will be created in the same directory as the raw data file. For further options you may look into the usage documentation via :bash:`modalities create_memmap_index --help`. Packed Dataset Generator -------------------------------------------------------------------------------- @@ -29,7 +27,7 @@ The :python:`PackedMemMapDatasetContinuous` and :python:`PackedMemMapDatasetMega modalities create_packed_data -The packed data file will be created in the same directory as the raw data file. For further options you may look into the usage documentation via :bash:`llm_gym create_packed_data --help`. +The packed data file will be created in the same directory as the raw data file. For further options you may look into the usage documentation via :bash:`modalities create_packed_data --help`. Packed Data Format ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/model_cards.rst b/docs/source/model_cards.rst index 2dbf99d6..dd7814fe 100644 --- a/docs/source/model_cards.rst +++ b/docs/source/model_cards.rst @@ -1,4 +1,3 @@ Model Cards ==================================================== -**EDIT "docs/source/model_cards.rst" IN ORDER TO MAKE CHANGES HERE** diff --git a/docs/source/quickstart.rst b/docs/source/quickstart.rst index 9ce55bba..d39a78a8 100644 --- a/docs/source/quickstart.rst +++ b/docs/source/quickstart.rst @@ -1,8 +1,6 @@ Quickstart ==================================================== -**EDIT "docs/source/quickstart.rst" IN ORDER TO MAKE CHANGES HERE** - Installation ----------------------------------------------------- Setup a conda environment `conda create -n modalities python=3.10 & conda activate modalities` and install the requirements `pip install -e .`. diff --git a/docs/source/vs_code_setup.rst b/docs/source/vs_code_setup.rst index 96272915..22dfc74f 100644 --- a/docs/source/vs_code_setup.rst +++ b/docs/source/vs_code_setup.rst @@ -1,33 +1,71 @@ VSCode Setup ==================================================== -**EDIT "docs/source/vs_code_setup.rst" IN ORDER TO MAKE CHANGES HERE** + + +We recommend a docker environment based on the most recent pytorch e.g.: + +.. code-block:: bash + + FROM pytorch/pytorch:2.1.2-cuda12.1-cudnn8-devel + RUN apt-get update && apt-get install -y wget openssh-client git-core bash-completion + RUN wget -O /tmp/git-lfs.deb https://packagecloud.io/github/git-lfs/packages/ubuntu/focal/git-lfs_2.13.3_amd64.deb/download.deb && \ + dpkg -i /tmp/git-lfs.deb && \ + rm /tmp/git-lfs.deb + RUN echo 'source /usr/share/bash-completion/completions/git' >> ~/.bashrc + CMD ["/bin/bash"] + +This works seamlessly in combination with the VSCode DevContainer extention: + +.. code-block:: json + + { + "name": "Dev Container", + "dockerFile": "Dockerfile", + "runArgs": [ + "--network", + "host", + "--gpus", + "all" + ], + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + "extensions": [ + "ms-python.python" + ] + } + } + } In VSCode, add this to your :file:`launch.json`: .. code-block:: json - { - "name": "Torchrun Main", - "type": "python", - "request": "launch", - "module": "torch.distributed.run", - "env": { - "CUDA_VISIBLE_DEVICES": "0" - }, - "args": [ - "--nnodes", - "1", - "--nproc_per_node", - "2", - "--rdzv-endpoint=0.0.0.0:29503", - "src/modalities/__main__.py", - "run", - "--config_file_path", - "config_files/config.yaml", - ], - "console": "integratedTerminal", - "justMyCode": true, - "envFile": "${workspaceFolder}/.env" - } + { + "name": "Torchrun Train and Eval", + "type": "python", + "request": "launch", + "module": "torch.distributed.run", + "env": { + "CUDA_VISIBLE_DEVICES": "4,5" + }, + "args": [ + "--nnodes", + "1", + "--nproc_per_node", + "2", + "--rdzv-endpoint=0.0.0.0:29503", + "src/modalities/__main__.py", + "run", + "--config_file_path", + "config_files/config_lorem_ipsum.yaml", + ], + "console": "integratedTerminal", + "justMyCode": true, + "envFile": "${workspaceFolder}/.env", + "cwd": "${workspaceFolder}/modalities" + }