Skip to content

Commit

Permalink
Merge branch 'main' into farhadr/ft_encoder_frozen
Browse files Browse the repository at this point in the history
Signed-off-by: Farhad Ramezanghorbani <[email protected]>
  • Loading branch information
farhadrgh authored Jan 21, 2025
2 parents 987dd92 + eb89056 commit af1619e
Show file tree
Hide file tree
Showing 99 changed files with 17,920 additions and 86 deletions.
10 changes: 5 additions & 5 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
},
"mounts": [
// Mount the local ~/.aws config to pass along AWS credentials for PBSS.
"source=${localEnv:HOME}/.aws,target=/home/bionemo/.aws,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ngc,target=/home/bionemo/.ngc,type=bind,consistency=cached",
"source=${localEnv:HOME}/.cache,target=/home/bionemo/.cache,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ssh,target=/home/bionemo/.ssh,readonly,type=bind,consistency=cached",
"source=${localEnv:HOME}/.netrc,target=/home/bionemo/.netrc,readonly,type=bind,consistency=cached"
"source=${localEnv:HOME}/.aws,target=/home/ubuntu/.aws,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ngc,target=/home/ubuntu/.ngc,type=bind,consistency=cached",
"source=${localEnv:HOME}/.cache,target=/home/ubuntu/.cache,type=bind,consistency=cached",
"source=${localEnv:HOME}/.ssh,target=/home/ubuntu/.ssh,readonly,type=bind,consistency=cached",
"source=${localEnv:HOME}/.netrc,target=/home/ubuntu/.netrc,readonly,type=bind,consistency=cached"
],
"containerEnv": {
"TMPDIR": "/tmp",
Expand Down
189 changes: 189 additions & 0 deletions .github/workflows/approvals.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
name: Enforce Tiered Approvals

on:
pull_request:
types:
- review_requested
- review_submitted
- synchronize
- opened
- closed
- edited
- reopened
pull_request_review:
types:
- submitted
- edited
- dismissed

# TODO: Action should run when someone approves / disapproves etc.
jobs:
enforce_tiered_approvals:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Parse CODEOWNERS file
id: parse_codeowners
run: |
echo "Parsing CODEOWNERS file..."
declare -A CODEOWNERS
declare -A TIER2_REVIEWERS
while IFS= read -r line; do
# Skip comments and empty lines
[[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
# Detect tier2 reviewers
if [[ "$line" =~ "# tier2" ]]; then
reviewers=$(echo "$line" | awk '{$1=""; $NF=""; print $0}' | xargs)
for reviewer in $reviewers; do
TIER2_REVIEWERS["$reviewer"]=1
done
continue
fi
# Parse +1 CODEOWNERS
path=$(echo "$line" | awk '{print $1}')
owners=$(echo "$line" | awk '{$1=""; print $0}' | xargs)
CODEOWNERS["$path"]="$owners"
done < CODEOWNERS
# Export mappings as JSON
echo "$(declare -p CODEOWNERS)" > codeowners.json
echo "$(declare -p TIER2_REVIEWERS)" > tier2reviewers.json
echo "CODEOWNERS and TIER2 reviewers exported to JSON."
- name: Get changed files
id: get_files
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
});
const changedFiles = files.map(file => file.filename);
core.setOutput('changedFiles', changedFiles.join(','));
- name: Get PR reviews
id: get_reviews
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { data: reviews } = await github.rest.pulls.listReviews({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
});
const latestReviews = {};
for (const review of reviews) {
latestReviews[review.user.login] = review.state;
}
console.log('Latest Reviews:', latestReviews);
const approvedUsers = Object.keys(latestReviews).filter(user => latestReviews[user] === 'APPROVED');
core.setOutput('approvedUsers', approvedUsers.join(','));
- name: Check +1 approvals (file-specific)
id: check_tier1
run: |
echo "Checking for +1 approvals for changed files..."
CHANGED_FILES="${{ steps.get_files.outputs.changedFiles }}"
APPROVED_USERS="${{ steps.get_reviews.outputs.approvedUsers }}"
# Load CODEOWNERS mapping
declare -A CODEOWNERS
eval "$(cat codeowners.json)"
TIER1_APPROVED=false
# Loop through changed files and verify approval
IFS=',' read -ra FILES <<< "$CHANGED_FILES"
IFS=',' read -ra USERS <<< "$APPROVED_USERS"
for FILE in "${FILES[@]}"; do
for PATTERN in "${!CODEOWNERS[@]}"; do
if [[ "$FILE" == $PATTERN* ]]; then
for OWNER in ${CODEOWNERS[$PATTERN]}; do
# Strip '@' from OWNER
CLEAN_OWNER="${OWNER#@}"
echo "Comparing APPROVED_USERS with CLEAN_OWNER: $CLEAN_OWNER"
if [[ " ${USERS[@]} " =~ " $CLEAN_OWNER " ]]; then
TIER1_APPROVED=true
break 3
fi
done
fi
done
done
if [[ "$TIER1_APPROVED" == "true" ]]; then
echo "tier1Approved=true" >> $GITHUB_ENV
else
echo "tier1Approved=false" >> $GITHUB_ENV
fi
echo $TIER1_APPROVED
- name: Check +2 approvals (global tier)
id: check_tier2
run: |
echo "Checking for +2 approvals..."
APPROVED_USERS="${{ steps.get_reviews.outputs.approvedUsers }}"
# Load TIER2_REVIEWERS mapping
declare -A TIER2_REVIEWERS
eval "$(cat tier2reviewers.json)"
TIER2_APPROVED=false
echo "Approved Users: $APPROVED_USERS"
# Iterate over approved users and compare with cleaned TIER2_REVIEWERS
for USER in ${APPROVED_USERS//,/ }; do
echo "Checking approved USER: $USER"
echo "TIER2_REVIEWERS: ${!TIER2_REVIEWERS[@]}"
for REVIEWER in "${!TIER2_REVIEWERS[@]}"; do
# Strip '@' from REVIEWER
CLEAN_REVIEWER="${REVIEWER#@}"
echo "Comparing USER: $USER with CLEAN_REVIEWER: $CLEAN_REVIEWER"
if [[ "$USER" == "$CLEAN_REVIEWER" ]]; then
TIER2_APPROVED=true
break 2
fi
done
done
if [[ "$TIER2_APPROVED" == "true" ]]; then
echo "tier2Approved=true" >> $GITHUB_ENV
else
echo "tier2Approved=false" >> $GITHUB_ENV
fi
echo "TIER2_APPROVED: $TIER2_APPROVED"
- name: Enforce approval requirements
run: |
echo "Enforcing approval requirements..."
if [[ "$tier1Approved" != "true" ]]; then
echo "ERROR: No +1 reviewer has approved the pull request for changed files."
exit 1
fi
if [[ "$tier2Approved" != "true" ]]; then
echo "ERROR: No +2 reviewer has approved the pull request."
exit 1
fi
echo "All tiered approval requirements met. Proceeding."
4 changes: 2 additions & 2 deletions .secrets.baseline
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@
"filename": "pyproject.toml",
"hashed_secret": "79670e9c9d1c7ea5b81a96a2053d81437712c78e",
"is_verified": false,
"line_number": 43
"line_number": 44
}
]
},
"generated_at": "2025-01-14T17:26:27Z"
"generated_at": "2025-01-15T19:06:19Z"
}
2 changes: 1 addition & 1 deletion 3rdparty/Megatron-LM
Submodule Megatron-LM updated 37 files
+6 −12 .gitlab/stages/01.test.yml
+37 −15 .gitlab/stages/03.publish.yml
+2 −1 .pylintrc
+1 −1 Dockerfile.ci.lts
+1 −1 examples/inference/gpt/gpt_batch_inference.py
+3 −3 megatron/core/dist_checkpointing/strategies/common.py
+4 −0 megatron/core/export/trtllm/model_to_trllm_mapping/default_conversion_dict.py
+11 −9 megatron/core/inference/engines/mcore_engine.py
+5 −5 megatron/core/inference/inference_request.py
+5 −3 megatron/core/inference/modelopt_support/gpt/model_specs.py
+1 −0 megatron/core/inference/sampling_params.py
+14 −9 megatron/core/inference/scheduler.py
+2 −2 megatron/core/inference/text_generation_controllers/encoder_decoder_text_generation_controller.py
+93 −32 megatron/core/inference/text_generation_controllers/text_generation_controller.py
+23 −2 megatron/core/models/gpt/gpt_layer_specs.py
+8 −6 megatron/core/models/multimodal/llava_spec.py
+1 −1 megatron/core/models/vision/vit_layer_specs.py
+1 −1 megatron/core/package_info.py
+1 −0 megatron/inference/text_generation/tokenization.py
+36 −30 megatron/inference/text_generation_server.py
+7 −4 megatron/training/one_logger_utils.py
+3 −1 megatron/training/training.py
+1 −6 tests/functional_tests/shell_test_utils/_run_training.sh
+1 −0 tests/test_utils/python_scripts/generate_local_jobs.py
+29 −9 tests/test_utils/python_scripts/launch_jet_workload.py
+1 −1 tests/test_utils/recipes/bert.yaml
+2 −2 tests/test_utils/recipes/gpt.yaml
+1 −1 tests/test_utils/recipes/t5.yaml
+2 −5 tests/test_utils/recipes/unit-tests.yaml
+1 −0 tests/unit_tests/distributed/test_grad_sync_with_expert_parallel.py
+2 −2 tests/unit_tests/inference/test_scheduler.py
+1 −1 tests/unit_tests/inference/text_generation_controllers/test_encoder_decoder_text_generation_controller.py
+15 −6 tests/unit_tests/inference/text_generation_controllers/test_simple_text_generation_controller.py
+39 −2 tests/unit_tests/models/test_gpt_model.py
+11 −5 tests/unit_tests/models/test_llava_model.py
+2 −2 tests/unit_tests/models/test_multimodal_projector.py
+69 −26 tools/run_text_generation_server.py
2 changes: 1 addition & 1 deletion 3rdparty/NeMo
Submodule NeMo updated 81 files
+1 −1 .github/workflows/_test_template.yml
+19 −4 .github/workflows/cicd-main.yml
+29 −50 .github/workflows/import-test.yml
+11 −19 Dockerfile.ci
+34 −4 README.md
+1 −2 docs/source/nlp/information_retrieval.rst
+36 −2 nemo/collections/common/tokenizers/sentencepiece_tokenizer.py
+0 −1 nemo/collections/diffusion/scripts/train.sh
+3 −0 nemo/collections/llm/gpt/model/gemma.py
+1 −1 nemo/collections/llm/gpt/model/ssm.py
+2 −2 nemo/collections/llm/inference/base.py
+2 −2 nemo/collections/llm/peft/api.py
+0 −2 nemo/collections/llm/recipes/gemma_2b.py
+0 −4 nemo/collections/llm/recipes/gemma_7b.py
+5 −0 nemo/collections/multimodal/data/energon/base.py
+22 −2 nemo/collections/multimodal/data/energon/config.py
+1 −1 nemo/collections/multimodal/data/energon/conversation.py
+143 −27 nemo/collections/multimodal/data/energon/task_encoder.py
+1 −1 nemo/collections/multimodal/models/text_to_image/controlnet/controlnet.py
+1 −1 nemo/collections/multimodal/models/text_to_image/imagen/imagen_pipeline.py
+13 −4 nemo/collections/multimodal/models/text_to_image/instruct_pix2pix/ldm/ddpm_edit.py
+3 −3 nemo/collections/multimodal/models/text_to_image/stable_diffusion/ldm/autoencoder.py
+2 −2 nemo/collections/multimodal/models/text_to_image/stable_diffusion/ldm/ddpm.py
+1 −1 nemo/collections/multimodal/modules/stable_diffusion/diffusionmodules/openaimodel.py
+2 −2 nemo/collections/multimodal/speech_llm/models/modular_models.py
+1 −1 nemo/collections/multimodal/speech_llm/parts/mixins/adapter_mixin.py
+10 −6 nemo/collections/nlp/data/language_modeling/megatron/gpt_sft_chat_dataset.py
+3 −36 nemo/collections/nlp/models/language_modeling/megatron/gpt_layer_modelopt_spec.py
+6 −0 nemo/collections/nlp/models/language_modeling/megatron_base_model.py
+1 −0 nemo/collections/nlp/models/language_modeling/megatron_gpt_model.py
+3 −0 nemo/collections/nlp/models/language_modeling/megatron_retro_model.py
+2 −0 nemo/collections/nlp/modules/common/megatron/megatron_init.py
+1 −1 nemo/collections/nlp/modules/common/tokenizer_utils.py
+1 −1 nemo/collections/nlp/parts/mixins/multimodal_adapter_mixins.py
+1 −1 nemo/collections/nlp/parts/mixins/nlp_adapter_mixins.py
+1 −0 nemo/collections/nlp/parts/nlp_overrides.py
+1 −1 nemo/collections/vlm/inference/base.py
+2 −2 nemo/collections/vlm/mllama/model/language.py
+3 −3 nemo/collections/vlm/neva/data/config.py
+63 −52 nemo/collections/vlm/neva/data/lazy.py
+64 −5 nemo/collections/vlm/neva/data/mock.py
+157 −0 nemo/collections/vlm/neva/data/sequence_packing.py
+34 −4 nemo/collections/vlm/neva/model/base.py
+1 −1 nemo/collections/vlm/recipes/llava15_13b.py
+1 −1 nemo/collections/vlm/recipes/llava15_7b.py
+1 −1 nemo/collections/vlm/recipes/llava_next_7b.py
+3 −0 nemo/export/trt_llm/nemo_ckpt_loader/nemo_file.py
+4 −1 nemo/lightning/megatron_parallel.py
+1 −1 nemo/lightning/pytorch/callbacks/peft.py
+17 −0 nemo/utils/app_state.py
+0 −3 pyproject.toml
+1 −1 requirements/requirements_deploy.txt
+1 −1 requirements/requirements_infer.txt
+1 −1 requirements/requirements_multimodal.txt
+1 −2 requirements/requirements_nlp.txt
+2 −1 scripts/checkpoint_converters/convert_bert_hf_to_nemo.py
+44 −4 scripts/checkpoint_converters/convert_mistral_7b_hf_to_nemo.py
+1 −1 scripts/vlm/llava_next_finetune.py
+1 −1 scripts/vlm/llava_next_pretrain.py
+1 −1 scripts/vlm/mllama_finetune.py
+80 −29 scripts/vlm/neva_finetune.py
+2 −0 tests/collections/llm/bitexact/mixtral/pretrain_mini_mixtral.py
+2 −2 tests/collections/llm/bitexact/mixtral/run.sh
+5 −0 tests/collections/llm/gpt/model/test_model_import.py
+0 −1 tests/collections/llm/hf/peft_nemorun.py
+0 −1 tests/collections/llm/hf/sft_nemorun.py
+2 −0 tests/collections/llm/megatron_mixtral_pretraining.py
+1 −0 tests/collections/llm/test_mnist_model_nemo2.py
+1 −0 tests/collections/llm/test_mnist_model_nemo2_fsdp.py
+2 −2 tests/collections/multimodal/data/energon/test_data_module.py
+73 −0 tests/collections/nlp/test_chat_sft_dataset.py
+63 −15 tests/collections/nlp/test_tokenizer_with_special_tokens.py
+0 −0 tests/collections/vlm/test_mllama_train.py
+7 −0 tests/collections/vlm/test_neva_train.py
+14 −0 tests/conftest.py
+2 −2 tests/core/test_exp_manager.py
+5 −5 tests/lightning/test_nemo_resume_from_ckpt.py
+2 −2 tutorials/llm/llama-3/nemo2-sft-peft/README.rst
+1 −3 tutorials/llm/llama-3/nemo2-sft-peft/nemo2-peft.ipynb
+0 −2 tutorials/llm/llama-3/nemo2-sft-peft/nemo2-sft.ipynb
+2 −7 tutorials/llm/mamba/mamba.rst
21 changes: 15 additions & 6 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@
# @trvachov - Timur Rvachov
# @yzhang123 - Yang Zhang

# TIER 2 Approvers do not modify the list below.
# Note: the # tier2 comment is a sentinel used to track who is tier2.
# +2 Reviewers (Global Tier)
* @jstjohn @pstjohn @trvachov # tier2

# TIER 1 Approvers below.
#
## LEGAL
#
Expand All @@ -42,13 +47,13 @@ license_header @dorotat-nv @jstjohn @malcolmgreaves @trvachov
#
## DOCUMENTATION
#
README.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn
docs @dorotat-nv @jstjohn @malcolmgreaves @pstjohn
README.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @jwilber
docs @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @jwilber
# These 2 are symlinks: actual content is under docs/
CODE-REVIEW.md @jstjohn @malcolmgreaves @pstjohn @trvachov
CONTRIBUTING.md @jstjohn @malcolmgreaves @pstjohn @trvachov
docs/CODE-REVIEW.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @trvachov
docs/CONTRIBUTING.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @trvachov
CODE-REVIEW.md @jstjohn @malcolmgreaves @pstjohn @trvachov @jwilber
CONTRIBUTING.md @jstjohn @malcolmgreaves @pstjohn @trvachov @jwilber
docs/CODE-REVIEW.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @trvachov @jwilber
docs/CONTRIBUTING.md @dorotat-nv @jstjohn @malcolmgreaves @pstjohn @trvachov @jwilber


#
Expand Down Expand Up @@ -87,10 +92,14 @@ sub-packages/bionemo-llm @farhadrgh @dorotat-nv @jstjohn @malcolmgreaves @pstjoh

sub-packages/bionemo-geometric @DejunL @guoqing-zhou @jstjohn @malcolmgreaves

sub-packages/bionemo-esm2 @pstjohn @jstjohn @skothenhill-nv @jomitchell @farhadrgh @simonchu

sub-packages/bionemo-example_model @jstjohn @malcolmgreaves @skothenhill-nv

sub-packages/bionemo-geneformer @jstjohn @malcolmgreaves @skothenhill-nv

sub-packages/bionemo-scdl @jstjohn @malcolmgreaves @polinabinder1 @skothenhill-nv

sub-packages/bionemo-noodles @skothenhill-nv @malcolmgreaves @jstjohn @edawson @cspades

sub-packages/bionemo-moco @nvdreidenbach @DejunL @dorotat-nv @guoqing-zhou @jstjohn @malcolmgreaves @pstjohn
61 changes: 20 additions & 41 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,33 +22,23 @@ WORKDIR /build
ARG MAX_JOBS=4
ENV MAX_JOBS=${MAX_JOBS}

# See NeMo readme for the latest tested versions of these libraries
ARG APEX_COMMIT=810ffae374a2b9cb4b5c5e28eaeca7d7998fca0c
RUN git clone https://github.com/NVIDIA/apex.git && \
cd apex && \
git checkout ${APEX_COMMIT} && \
pip install . -v --no-build-isolation --disable-pip-version-check --no-cache-dir \
--config-settings "--build-option=--cpp_ext --cuda_ext --fast_layer_norm --distributed_adam --deprecated_fused_adam --group_norm"

# Transformer Engine pre-1.7.0. 1.7 standardizes the meaning of bits in the attention mask to match
ARG TE_COMMIT=2215fa5c7557b66034068816020f9f611019e457
RUN git clone https://github.com/NVIDIA/TransformerEngine.git && \
cd TransformerEngine && \
git fetch origin ${TE_COMMIT} && \
git checkout FETCH_HEAD && \
git submodule init && git submodule update && \
NVTE_FRAMEWORK=pytorch NVTE_WITH_USERBUFFERS=1 MPI_HOME=/usr/local/mpi pip install .

# Install core apt packages.
RUN apt-get update \
&& apt-get install -y \
RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,id=apt-lib,target=/var/lib/apt,sharing=locked \
<<EOF
set -eo pipefail
apt-get update -qy
apt-get install -qyy \
libsndfile1 \
ffmpeg \
git \
curl \
pre-commit \
sudo \
&& rm -rf /var/lib/apt/lists/*
sudo
apt-get upgrade -qyy \
rsync
rm -rf /tmp/* /var/tmp/*
EOF

RUN apt-get install -y gnupg

Expand Down Expand Up @@ -84,12 +74,12 @@ ENV UV_LINK_MODE=copy \
UV_COMPILE_BYTECODE=1 \
UV_PYTHON_DOWNLOADS=never \
UV_SYSTEM_PYTHON=true \
UV_NO_CACHE=1 \
UV_BREAK_SYSTEM_PACKAGES=1

# Install the bionemo-geometric requirements ahead of copying over the rest of the repo, so that we can cache their
# installation. These involve building some torch extensions, so they can take a while to install.
RUN --mount=type=bind,source=./sub-packages/bionemo-geometric/requirements.txt,target=/requirements-pyg.txt \
--mount=type=cache,target=/root/.cache \
uv pip install --no-build-isolation -r /requirements-pyg.txt

COPY --from=rust-env /usr/local/cargo /usr/local/cargo
Expand All @@ -98,19 +88,6 @@ COPY --from=rust-env /usr/local/rustup /usr/local/rustup
ENV PATH="/usr/local/cargo/bin:/usr/local/rustup/bin:${PATH}"
ENV RUSTUP_HOME="/usr/local/rustup"

RUN <<EOF
set -eo pipefail
uv pip install maturin --no-build-isolation

pip install --use-deprecated=legacy-resolver --no-build-isolation \
tensorstore==0.1.45
sed -i 's/^Version: 0\.0\.0$/Version: 0.1.45/' \
/usr/local/lib/python3.12/dist-packages/tensorstore-0.0.0.dist-info/METADATA
mv /usr/local/lib/python3.12/dist-packages/tensorstore-0.0.0.dist-info \
/usr/local/lib/python3.12/dist-packages/tensorstore-0.1.45.dist-info
rm -rf /root/.cache/*
EOF

WORKDIR /workspace/bionemo2

# Install 3rd-party deps and bionemo submodules.
Expand All @@ -122,11 +99,13 @@ COPY ./sub-packages /workspace/bionemo2/sub-packages
# Includes a hack to install tensorstore 0.1.45, which doesn't distribute a pypi wheel for python 3.12, and the metadata
# in the source distribution doesn't match the expected pypi version.
RUN --mount=type=bind,source=./.git,target=./.git \
--mount=type=bind,source=./requirements-test.txt,target=/requirements-test.txt \
--mount=type=bind,source=./requirements-cve.txt,target=/requirements-cve.txt \
<<EOF
--mount=type=bind,source=./requirements-test.txt,target=/requirements-test.txt \
--mount=type=bind,source=./requirements-cve.txt,target=/requirements-cve.txt \
--mount=type=cache,target=/root/.cache <<EOF
set -eo pipefail

uv pip install maturin --no-build-isolation

uv pip install --no-build-isolation \
./3rdparty/* \
./sub-packages/bionemo-* \
Expand All @@ -145,8 +124,8 @@ EOF
FROM ${BASE_IMAGE} AS dev

RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,id=apt-lib,target=/var/lib/apt,sharing=locked \
<<EOF
--mount=type=cache,id=apt-lib,target=/var/lib/apt,sharing=locked \
<<EOF
set -eo pipefail
apt-get update -qy
apt-get install -qyy \
Expand Down Expand Up @@ -189,7 +168,7 @@ ENV PATH="/usr/local/cargo/bin:/usr/local/rustup/bin:${PATH}"
ENV RUSTUP_HOME="/usr/local/rustup"

RUN --mount=type=bind,source=./requirements-dev.txt,target=/workspace/bionemo2/requirements-dev.txt \
--mount=type=cache,id=uv-cache,target=/root/.cache,sharing=locked <<EOF
--mount=type=cache,target=/root/.cache <<EOF
set -eo pipefail
uv pip install -r /workspace/bionemo2/requirements-dev.txt
rm -rf /tmp/*
Expand Down
Loading

0 comments on commit af1619e

Please sign in to comment.