Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0511e5d
update maxtext to version 022dc02
llying-001 Feb 4, 2026
2e58d67
update maxtext part 1
llying-001 Feb 4, 2026
a506657
update maxtext: part II
llying-001 Feb 9, 2026
a6f37d8
update maxtext III
llying-001 Feb 9, 2026
b96d0b3
update jax docker to 26.1
llying-001 Feb 10, 2026
3767dbd
fix ib deps for jax
llying-001 Feb 10, 2026
cbda947
fix mixtral config error
llying-001 Feb 11, 2026
e0794c9
add 405b config file
llying-001 Feb 12, 2026
a704cee
update multi-node shell for jax
llying-001 Feb 13, 2026
10d1a0f
Improve slurm launcher logging and make nodelist optional
amd-fuyuajin Feb 14, 2026
f09fc6f
corrected XLA_FLAGS and added env var to suppress errors
amd-fuyuajin Feb 14, 2026
a0aed10
Make Jax/MaxText work for the unified primus-cli launching command
amd-fuyuajin Feb 16, 2026
62c59e4
Updated the apt install package list for Jax/MaxText
amd-fuyuajin Feb 18, 2026
eac1364
add /dev/infiniband as default in primus-cli global config file
amd-fuyuajin Feb 18, 2026
08967fd
add primus-cli global config yaml file for AINIC usage
amd-fuyuajin Feb 18, 2026
095b267
Updated Primus-cli user guide
amd-fuyuajin Feb 18, 2026
87bc2e7
Update docs/cli/PRIMUS-CLI-GUIDE.md
amd-fuyuajin Feb 25, 2026
fdb9c48
fix up by review
llying-001 Feb 25, 2026
36a162d
update cicd for maxtext
llying-001 Feb 25, 2026
ba5c95c
disable turbo install to avoid segfault, update cicd for jax and enab…
llying-001 Feb 26, 2026
faec60e
Merge branch 'main' into dev/fuyuajin/maxtext-backend-test
llying-001 Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ env:
PRIMUS_TURBO_COMMIT: 5233748e9c5c5795a6484ab31ece47c442d29ec2 # feat(mxfp4): refactor gemm mxfp4 and mxfp8. fuse transpose, hadamard transform and quantization. (#195)
ROCSHMEM_COMMIT: 17ff985c026f9f97f85068647e863ab541dd5645 # Update version to 3.2.0 for 7.2.0 rocm release (#351) (#355)
BASE_IMAGE: docker.io/rocm/primus:v26.1
MAXTEXT_BASE_IMAGE: docker.io/rocm/jax-training:maxtext-v25.9
MAXTEXT_BASE_IMAGE: docker.io/rocm/jax-training:maxtext-v26.1

jobs:
code-lint:
Expand Down Expand Up @@ -263,7 +263,7 @@ jobs:
env:
PRIMUS_WORKDIR: /wekafs/primus-data/primus_safe_ci/jax
needs: [code-lint]
runs-on: [primus-lm-cicd-jax-8t8mh]
runs-on: [primus-lm-cicd-jax-v26d1-dl6qc]
steps:
- run: echo "🎉 Begin Primus-Turbo Checkout."
- name: Set commit hash to env
Expand All @@ -286,19 +286,16 @@ jobs:
echo "✅ [Pip install requirements] started at: $(date)"
mkdir -p ${PRIMUS_WORKDIR}/primus-cache
python3 -m pip install --upgrade pip setuptools
pip3 install --cache-dir=${PRIMUS_WORKDIR}/primus-cache --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/rocm7.0
MAX_JOBS=128 pip3 install --cache-dir=${PRIMUS_WORKDIR}/primus-cache --no-build-isolation --no-clean -r requirements.txt
end_time=$(date +%s)
elapsed=$((end_time - start_time))
echo "✅ [Pip install requirements] ended at: $(date)"
echo "⏱️ [Pip install requirements] Total elapsed time: ${elapsed} seconds"
start_time=$(date +%s)
echo "✅ [build primus-turbo] started at: $(date)"
PRIMUS_TURBO_FRAMEWORK="JAX" pip3 install --no-build-isolation -e . -v
end_time=$(date +%s)
elapsed=$((end_time - start_time))
echo "✅ [build primus-turbo] ended at: $(date)"
echo "⏱️ [build primus-turbo] Total elapsed time: ${elapsed} seconds"
echo "⏱️ [build primus-turbo] Torch installation causes segfault, so we skip it and actually not install turbo. Total elapsed time: ${elapsed} seconds"
- run: echo "🎉 Begin Primus Unit Test."
- uses: actions/checkout@v4
with:
Expand Down
31 changes: 24 additions & 7 deletions docs/cli/PRIMUS-CLI-GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

```bash
# Run GEMM benchmark directly on current host
./primus-cli direct -- benchmark gemm -M 4096 -N 4096 -K 4096
./primus-cli direct -- benchmark gemm --M 4096 --N 4096 --K 4096
```

---
Expand Down Expand Up @@ -65,7 +65,7 @@ Primus CLI supports three execution modes, each suitable for different scenarios
./primus-cli direct -- train pretrain --config config.yaml

# GEMM benchmark
./primus-cli direct -- benchmark gemm -M 4096 -N 4096 -K 4096
./primus-cli direct -- benchmark gemm --M 4096 --N 4096 --K 4096

# Environment check (info only)
./primus-cli direct -- preflight --host --gpu --network
Expand Down Expand Up @@ -115,7 +115,7 @@ Primus CLI supports three execution modes, each suitable for different scenarios

# Set resource limits
./primus-cli container --cpus 32 --memory 256G \
-- benchmark gemm -M 8192 -N 8192 -K 8192
-- benchmark gemm --M 8192 --N 8192 --K 8192

# Mount local Primus code for development
./primus-cli container --volume ~/workspace/Primus:/workspace/Primus \
Expand Down Expand Up @@ -164,10 +164,18 @@ Primus CLI supports three execution modes, each suitable for different scenarios
-- train pretrain --config deepseek_v2.yaml

# Run distributed GEMM benchmark
./primus-cli slurm srun -N 2 -- benchmark gemm -M 16384 -N 16384 -K 16384
./primus-cli slurm srun -N 2 -- benchmark gemm --M 16384 --N 16384 --K 16384

# Multi-node environment check (info only)
# this will generate a fast info report of the host, GPU, and network
./primus-cli slurm srun -N 4 -- preflight --host --gpu --network

# this will generate a full preflight report of the host, GPU, and network, as well as the performance tests
./primus-cli slurm srun -N 4 -- preflight --report-file-name preflight-report-4N

# if you are using AINIC in your cluster, use the appropriate configuration file
# for preflight test, set docker image to rocm/primus:v26.1 in the configuration file
./primus-cli --config runner/use_ainic.yaml slurm srun -N 2 -- preflight --report-file-name preflight-report-2N
```

**Suitable for**:
Expand Down Expand Up @@ -250,6 +258,15 @@ direct:
./primus-cli --config prod.yaml slurm srun -N 8 -- train pretrain
```

### Using AINIC Configuration File

If you are using AINIC in your cluster, you can use the `runner/use_ainic.yaml` configuration file to configure the AINIC environment. This file includes pre-configured environment variables for AINIC: `USING_AINIC=1`, `NCCL_PXN_DISABLE=0`, and `NCCL_IB_GID_INDEX=1`. You can modify the `NCCL_IB_GID_INDEX` value based on your AINIC settings and update the `image` value to match your Docker image.

Here is an example of using the AINIC configuration file to run a training job:
```bash
./primus-cli --config runner/use_ainic.yaml slurm srun -N 2 -- train pretrain --config examples/maxtext/configs/MI355X/llama2_7B-pretrain.yaml
```

### Configuration Priority

**Priority Order** (high to low):
Expand Down Expand Up @@ -306,13 +323,13 @@ Command-line args > Specified config file > System default config > User config
#### GEMM Benchmark
```bash
# Single-node GEMM
./primus-cli direct -- benchmark gemm -M 4096 -N 4096 -K 4096
./primus-cli direct -- benchmark gemm --M 4096 --N 4096 --K 4096

# Run in container
./primus-cli container -- benchmark gemm -M 8192 -N 8192 -K 8192
./primus-cli container -- benchmark gemm --M 8192 --N 8192 --K 8192

# Multi-node GEMM
./primus-cli slurm srun -N 2 -- benchmark gemm -M 16384 -N 16384 -K 16384
./primus-cli slurm srun -N 2 -- benchmark gemm --M 16384 --N 16384 --K 16384
```

#### Other Benchmarks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ modules:
capacity_factor: 1
max_target_length: 4096
per_device_batch_size: 12
remat_policy: "minimal"
remat_policy: "save_dot_with_context_except_mlp"
51 changes: 51 additions & 0 deletions examples/maxtext/configs/MI355X/llama3.1_405B-pretrain.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
work_group: ${PRIMUS_TEAM:amd}
user_name: ${PRIMUS_USER:root}
exp_name: ${PRIMUS_EXP_NAME:llama3.1_405B-pretrain}
workspace: ./output

modules:
pre_trainer:
framework: maxtext
config: pre_trainer.yaml

# model to run
model: llama3.1_405B.yaml
overrides:
run_name: "llama3.1_405b_training"
base_output_directory: "./output"
steps: 50
log_period: 10
profiler: ""

# data
dataset_type: "synthetic"
hf_access_token: ${HF_TOKEN:""}

# checkpoint
enable_checkpointing: false
async_checkpointing: false

# inter-node parallelism strategy
dcn_data_parallelism: 1
dcn_fsdp_parallelism: -1
dcn_pipeline_parallelism: 1
dcn_tensor_parallelism: 1
dcn_sequence_parallelism: 1

# intra-node parallelism strategy
ici_fsdp_parallelism: -1
ici_data_parallelism: 1
ici_sequence_parallelism: 1
ici_tensor_parallelism: 1
ici_pipeline_parallelism: 1

remat_policy: 'full'
optimizer_memory_host_offload: False
param_scan_axis: 1
megablox: False

use_iota_embed: True
scan_layers: True

max_target_length: 8192
per_device_batch_size: 5
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ modules:
megablox: false
capacity_factor: 1
max_target_length: 4096
per_device_batch_size: 12
per_device_batch_size: 11
remat_policy: "minimal"
2 changes: 1 addition & 1 deletion examples/run_local_pretrain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ EXP=${EXP:-"examples/megatron/exp_pretrain.yaml"}

# Default docker image
if [ "${BACKEND:-}" = "MaxText" ]; then
DOCKER_IMAGE=${DOCKER_IMAGE:-"docker.io/rocm/jax-training:maxtext-v25.9"}
DOCKER_IMAGE=${DOCKER_IMAGE:-"docker.io/rocm/jax-training:maxtext-v26.1"}
else
DOCKER_IMAGE=${DOCKER_IMAGE:-"docker.io/rocm/primus:v26.1"}
fi
Expand Down
106 changes: 65 additions & 41 deletions examples/run_pretrain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -175,32 +175,49 @@ export NCCL_CHECKS_DISABLE=1

# Set InfiniBand GID index for NCCL communication
if [ "$USING_AINIC" == "1" ]; then
export ANP_HOME_DIR=${ANP_HOME_DIR:-"/opt/amd-anp"}
export RCCL_HOME_DIR=${RCCL_HOME_DIR:-"/opt/rccl"}
export MPI_HOME_DIR=${MPI_HOME_DIR:-"/opt/ompi"}
export NCCL_NET_PLUGIN=librccl-anp.so

LOG_INFO_RANK0 "Using AINIC"
LOG_INFO_RANK0 "RCCL_HOME_DIR: $RCCL_HOME_DIR"
LOG_INFO_RANK0 "ANP_HOME_DIR: $ANP_HOME_DIR"
LOG_INFO_RANK0 "MPI_HOME_DIR: $MPI_HOME_DIR"

# unset NCCL_IB_GID_INDEX
export NCCL_IB_GID_INDEX=1
# export NCCL_IB_ROCE_VERSION_NUM=2
export NCCL_MAX_P2P_CHANNELS=56
export NCCL_IB_TC=104
export NCCL_IB_FIFO_TC=192
export NET_OPTIONAL_RECV_COMPLETION=1
export NCCL_IB_USE_INLINE=1
export RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING=0
export NCCL_GDR_FLUSH_DISABLE=1
export NCCL_DMABUF_ENABLE=0
export NCCL_IGNORE_CPU_AFFINITY=1
export NCCL_IB_QPS_PER_CONNECTION=1

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/libibverbs:${RCCL_HOME_DIR}/build/release:${ANP_HOME_DIR}/build:${MPI_HOME_DIR}/lib:$LD_LIBRARY_PATH

if [ "${BACKEND:-}" == "MaxText" ]; then
# ------- RCCL/NCCL IB Tuning -------
export IONIC_LOCKFREE=all
export NCCL_GDR_COPY_ENABLE=1
export NCCL_GDR_FLUSH_DISABLE=1
export NCCL_IB_ECE_ENABLE=0
export NCCL_IB_FIFO_TC=184
export NCCL_IB_GID_INDEX=1
export NCCL_IB_PCI_RELAXED_ORDERING=1
export NCCL_IB_TC=96
export NCCL_IB_USE_INLINE=1
export NCCL_IGNORE_CPU_AFFINITY=1
export NCCL_PXN_DISABLE=0
export NET_OPTIONAL_RECV_COMPLETION=1
export RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING=0
export RCCL_LL128_FORCE_ENABLE=1
else
export ANP_HOME_DIR=${ANP_HOME_DIR:-"/opt/amd-anp"}
export RCCL_HOME_DIR=${RCCL_HOME_DIR:-"/opt/rccl"}
export MPI_HOME_DIR=${MPI_HOME_DIR:-"/opt/ompi"}
export NCCL_NET_PLUGIN=librccl-anp.so

LOG_INFO_RANK0 "RCCL_HOME_DIR: $RCCL_HOME_DIR"
LOG_INFO_RANK0 "ANP_HOME_DIR: $ANP_HOME_DIR"
LOG_INFO_RANK0 "MPI_HOME_DIR: $MPI_HOME_DIR"

# unset NCCL_IB_GID_INDEX
export NCCL_IB_GID_INDEX=1
# export NCCL_IB_ROCE_VERSION_NUM=2
export NCCL_MAX_P2P_CHANNELS=56
export NCCL_IB_TC=104
export NCCL_IB_FIFO_TC=192
export NET_OPTIONAL_RECV_COMPLETION=1
export NCCL_IB_USE_INLINE=1
export RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING=0
export NCCL_GDR_FLUSH_DISABLE=1
export NCCL_DMABUF_ENABLE=0
export NCCL_IGNORE_CPU_AFFINITY=1
export NCCL_IB_QPS_PER_CONNECTION=1

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/libibverbs:${RCCL_HOME_DIR}/build/release:${ANP_HOME_DIR}/build:${MPI_HOME_DIR}/lib:$LD_LIBRARY_PATH
fi
Comment on lines +179 to +220
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain why we need to have different flags (NCCL_IB_TC, NCCL_IB_FIFO_TC) when using MaxText backend or not using MaxText backend? I think these flags are more related to cluster settings, right?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@llying-001 can explain this better. I did not change any of this part.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain why we need to have different flags (NCCL_IB_TC, NCCL_IB_FIFO_TC) when using MaxText backend or not using MaxText backend? I think these flags are more related to cluster settings, right?

I extracted these env flags for MaxText backend from https://github.com/ROCm/MAD/blob/develop/scripts/jax-maxtext/jax_maxtext_multinode_benchmark.sh#L305. They are actually related to the cluster instead of backend. Are the env flags in jax_maxtext_multinode_benchmark.sh configured for Vultr cluster? @yeandy
For the Megatron/Titan backend, which cluster are the env flags in run_pretrain.sh configured for? @zhenhuang12
It would be great if we could unify them.

else
export NCCL_IB_GID_INDEX=3
fi
Expand Down Expand Up @@ -272,9 +289,15 @@ if [ "${BACKEND:-}" == "MaxText" ]; then
export DUMP_HLO_DIR=${DUMP_HLO_DIR:-"${PRIMUS_PATH}/output/xla_dump_hlo"}
export DUMP_HLO=${DUMP_HLO:-0}
export NVTE_ALLOW_NONDETERMINISTIC_ALGO=1
export XLA_PYTHON_CLIENT_MEM_FRACTION=.97
if [ "${NNODES}" -gt 1 ]; then
export XLA_PYTHON_CLIENT_MEM_FRACTION=.93
export JAX_HIP_GRAPH_LOWERING=false
else
export XLA_PYTHON_CLIENT_MEM_FRACTION=.97
fi
export TF_CPP_MIN_LOG_LEVEL=2 # this env var is used to suppress the error logs at the end of training
export XLA_FLAGS="--xla_gpu_memory_limit_slop_factor=95 --xla_gpu_reduce_scatter_combine_threshold_bytes=8589934592 --xla_gpu_enable_command_buffer='' --xla_gpu_enable_latency_hiding_scheduler=true --xla_gpu_all_gather_combine_threshold_bytes=8589934592 --xla_gpu_enable_triton_gemm=false --xla_gpu_enable_cublaslt=true --xla_gpu_autotune_level=4 --xla_gpu_enable_all_gather_combine_by_dim=false"
export NVTE_USE_HIPBLASLT=1
export XLA_FLAGS="--xla_gpu_memory_limit_slop_factor=95 --xla_gpu_reduce_scatter_combine_threshold_bytes=8589934592 --xla_gpu_graph_level=0 --xla_gpu_enable_latency_hiding_scheduler=True --xla_gpu_all_gather_combine_threshold_bytes=8589934592 --xla_gpu_enable_triton_gemm=False --xla_gpu_enable_cublaslt=True --xla_gpu_autotune_level=0 --xla_gpu_enable_all_gather_combine_by_dim=FALSE"
if [ "${DUMP_HLO}" = "1" ]; then
mkdir -p "${DUMP_HLO_DIR}"
export XLA_FLAGS="$XLA_FLAGS --xla_dump_to=$DUMP_HLO_DIR"
Expand Down Expand Up @@ -403,6 +426,21 @@ if [[ "$PATCH_TE_FLASH_ATTN" == "1" ]]; then
fi
LOG_INFO_RANK0 ""

# -------------------- Install required packages for Jax --------------------
install_pkgs_for_maxtext() {
LOG_INFO_RANK0 "========== Install IB required packages for Jax/MaxText =========="
apt update
apt install autoconf automake libtool pkg-config -y
apt install jq dpkg-dev kmod xz-utils -y
apt install libibverbs-dev ibverbs-utils infiniband-diags -y
apt install rdma-core librdmacm-dev libibverbs-dev libibumad-dev -y
LOG_INFO_RANK0 "========== Install IB required packages for Jax/MaxText Done =========="
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are not for JAX/MaxText libraries per-se, but rather to add missing dependencies not found in the public docker (like rocm/jax-training:maxtext-v26.1), right? @amd-fuyuajin

We don't need to do this for megatron or torchtitan jobs? Or is this already installed in those dockers? @wenxie-amd

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These packages are mainly related to InfiniBand/RDMA libraries. I see they are only installed when NNODES > 1 (line 440). They probably provide networking stack for distributed training. Again, @llying-001 added this and can explain better.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, these packages are dependencies required for REBUILD_BNXT that are missing in the public JAX docker image (e.g., rocm/jax-training:maxtext-v26.1), but they are already installed in the Torch docker image (e.g., rocm/primus:v26.1)

}

if [[ "$NNODES" -gt 1 ]] && [[ "${BACKEND:-}" == "MaxText" ]]; then
install_pkgs_for_maxtext
fi

# ----------------- Rebuild nbxt -----------------
export REBUILD_BNXT=${REBUILD_BNXT:-0}
export PATH_TO_BNXT_TAR_PACKAGE=${PATH_TO_BNXT_TAR_PACKAGE}
Expand All @@ -423,20 +461,6 @@ else
LOG_INFO "Skip bnxt rebuild. REBUILD_BNXT=$REBUILD_BNXT, PATH_TO_BNXT_TAR_PACKAGE=$PATH_TO_BNXT_TAR_PACKAGE"
fi

# -------------------- Install required packages for Jax --------------------
install_pkgs_for_maxtext() {
LOG_INFO_RANK0 "========== Install required packages for Jax/MaxText =========="
apt install iproute2 -y
apt install -y linux-headers-"$(uname -r)" libelf-dev
apt install -y gcc make libtool autoconf librdmacm-dev rdmacm-utils infiniband-diags ibverbs-utils perftest ethtool libibverbs-dev \
rdma-core strace libibmad5 libibnetdisc5 ibverbs-providers libibumad-dev libibumad3 libibverbs1 libnl-3-dev libnl-route-3-dev
LOG_INFO_RANK0 "========== Install required packages for Jax/MaxText Done =========="
}

if [[ "$NNODES" -gt 1 ]] && [[ "${BACKEND:-}" == "MaxText" ]]; then
install_pkgs_for_maxtext
fi

# -------------------- HipBLASLt Tuning --------------------
handle_hipblaslt_tuning() {
local STAGE=${PRIMUS_HIPBLASLT_TUNING_STAGE:-0}
Expand Down
8 changes: 5 additions & 3 deletions examples/run_slurm_pretrain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Optional Environment Variables:
NNODES Number of nodes to use [default: 1]
MASTER_PORT Master port [default: 12345]
LOG_DIR Directory for log output [default: ./output]
NODE_LIST Comma-separated list of nodes for srun --nodelist [default: unset]

Example:
export DATA_PATH=/mnt/data
Expand All @@ -35,12 +36,13 @@ export NNODES=${NNODES:-1}
SCRIPT_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")")

export LOG_DIR=${LOG_DIR:-"./output"}
LOG_FILE="${LOG_DIR}/log_slurm_pretrain.txt"
LOG_FILE="${LOG_DIR}/log_slurm_pretrain_$(date +%Y%m%d_%H%M%S).txt"
mkdir -p "$LOG_DIR"

srun -N "${NNODES}" \
--exclusive \
--export ALL \
${NODE_LIST:+--nodelist="${NODE_LIST}"} \
--ntasks-per-node=1 \
--cpus-per-task="${CPUS_PER_TASK:-128}" \
bash -c "
Expand All @@ -58,5 +60,5 @@ srun -N "${NNODES}" \
export NODE_RANK=\${SLURM_PROCID}
export GPUS_PER_NODE=\${SLURM_GPUS_ON_NODE}
export REBUILD_PRIMUS_TURBO=\${REBUILD_PRIMUS_TURBO}
bash ${SCRIPT_DIR}/run_local_pretrain.sh \"\$@\" 2>&1 | tee ${LOG_FILE}
" bash "$@"
bash ${SCRIPT_DIR}/run_local_pretrain.sh \"\$@\"
" bash "$@" 2>&1 | tee "${LOG_FILE}"
Loading