diffusion_baseline / envs /create_all.sh
jyliuAI's picture
Add files using upload-large-folder tool
784f572 verified
Raw History Blame Contribute Delete
4.95 kB
#!/usr/bin/env bash
# Create/update only the isolated baseline environments. This script never
# activates an environment or changes shell startup files.
set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
if [[ -n "${DLB_CONDA:-}" ]]; then
CONDA_BIN="${DLB_CONDA}"
elif command -v mamba >/dev/null 2>&1; then
CONDA_BIN="$(command -v mamba)"
elif command -v conda >/dev/null 2>&1; then
CONDA_BIN="$(command -v conda)"
else
echo "Neither mamba nor conda is available; set DLB_CONDA to an explicit executable." >&2
exit 127
fi
ALL_ENVIRONMENTS=(
dlb-flm dlb-langflow dlb-duo dlb-mdlm dlb-candi dlb-rdlm dlb-sdtt dlb-di4c dlb-eval
)
if [[ -n "${DLB_ENV_NAMES:-}" ]]; then
IFS=',' read -r -a ENVIRONMENTS <<<"${DLB_ENV_NAMES}"
else
ENVIRONMENTS=("${ALL_ENVIRONMENTS[@]}")
fi
environment_file() {
local environment="$1"
local filename="${environment#dlb-}"
local path="${REPO_ROOT}/envs/${filename}.yml"
[[ " ${ALL_ENVIRONMENTS[*]} " == *" ${environment} "* && -f "${path}" ]] || return 1
printf '%s\n' "${path}"
}
environment_exists() {
local environment="$1"
local listing
local info
listing="$("${CONDA_BIN}" env list --json)" || return 2
info="$("${CONDA_BIN}" info --json)" || return 2
python3 -c '
import json
import os
import sys
target = sys.argv[1]
try:
environment_document = json.loads(sys.argv[2])
info_document = json.loads(sys.argv[3])
except (json.JSONDecodeError, TypeError):
sys.exit(2)
if not isinstance(environment_document, dict) or not isinstance(info_document, dict):
sys.exit(2)
environments = environment_document.get("envs")
directories = info_document.get("envs_dirs")
if not isinstance(environments, list) or not isinstance(directories, list):
sys.exit(2)
if not all(isinstance(path, str) for path in environments + directories):
sys.exit(2)
known = {os.path.normpath(path) for path in environments}
expected = {os.path.normpath(os.path.join(directory, target)) for directory in directories}
if known & expected:
sys.exit(0)
if any(os.path.basename(path) == target for path in known):
sys.exit(2)
sys.exit(1)
' "${environment}" "${listing}" "${info}"
}
flash_attention_version() {
case "$1" in
dlb-flm) printf '%s\n' '2.7.4.post1' ;;
dlb-duo|dlb-sdtt|dlb-di4c) printf '%s\n' '2.7.4.post1' ;;
dlb-mdlm) printf '%s\n' '2.5.6' ;;
dlb-candi) printf '%s\n' '2.6.1' ;;
*) return 1 ;;
esac
}
post_torch_pip_requirements() {
case "$1" in
dlb-mdlm)
printf '%s\n' \
'git+https://github.com/Dao-AILab/causal-conv1d.git@v1.1.3.post1' \
'git+https://github.com/state-spaces/mamba.git@v1.1.4'
;;
esac
}
check_pytorch_import() {
local environment="$1"
"${CONDA_BIN}" run -n "${environment}" python -c \
'import torch; print(torch.__version__, torch.version.cuda)'
}
install_post_torch_pip_requirements() {
local environment="$1"
local requirement
local requirements=()
while IFS= read -r requirement; do
[[ -n "${requirement}" ]] && requirements+=("${requirement}")
done < <(post_torch_pip_requirements "${environment}")
if ((${#requirements[@]} == 0)); then
return 0
fi
"${CONDA_BIN}" run -n "${environment}" python -m pip install \
--no-build-isolation "${requirements[@]}"
}
failures=()
for environment in "${ENVIRONMENTS[@]}"; do
if ! yaml_path="$(environment_file "${environment}")"; then
echo "Unknown environment: ${environment}" >&2
failures+=("${environment}")
continue
fi
if environment_exists "${environment}"; then
action=(env update --file "${yaml_path}")
else
discovery_status=$?
if ((discovery_status == 1)); then
action=(env create --file "${yaml_path}")
else
echo "FAILED ${environment}: environment discovery was unreliable." >&2
failures+=("${environment}")
continue
fi
fi
if ! "${CONDA_BIN}" "${action[@]}"; then
echo "FAILED ${environment}: conda environment ${action[1]} failed." >&2
failures+=("${environment}")
continue
fi
if ! check_pytorch_import "${environment}"; then
echo "FAILED ${environment}: PyTorch import failed before post-install steps." >&2
failures+=("${environment}")
continue
fi
if ! install_post_torch_pip_requirements "${environment}"; then
echo "FAILED ${environment}: post-torch pip requirements installation failed." >&2
failures+=("${environment}")
continue
fi
if flash_version="$(flash_attention_version "${environment}")"; then
if ! "${CONDA_BIN}" run -n "${environment}" python -m pip install \
"flash-attn==${flash_version}" --no-build-isolation; then
echo "FAILED ${environment}: FlashAttention ${flash_version} installation failed." >&2
failures+=("${environment}")
continue
fi
fi
done
if ((${#failures[@]})); then
echo "Environment creation/update failed: ${failures[*]}" >&2
exit 1
fi