Skip to content

Commit 23318d1

Browse files
authored
refactor(env): Refine cuda installation. (#89)
1 parent de96f1f commit 23318d1

3 files changed

Lines changed: 77 additions & 21 deletions

File tree

‎install/_utils.sh‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,59 @@ try_install() {
2020
}
2121
}
2222

23+
prepare_cxx_runtime_libs() {
24+
local runtime_dir="$CONDA_PREFIX/lib/embodiedgen-runtime"
25+
local runtime_lib
26+
27+
mkdir -p "$runtime_dir"
28+
for runtime_lib in libstdc++.so.6 libgcc_s.so.1; do
29+
if [[ ! -e "$CONDA_PREFIX/lib/$runtime_lib" ]]; then
30+
log_error "Missing required C++ runtime library: $CONDA_PREFIX/lib/$runtime_lib"
31+
return 1
32+
fi
33+
ln -sfn "../$runtime_lib" "$runtime_dir/$runtime_lib"
34+
done
35+
}
36+
37+
write_cuda_deactivation_hook() {
38+
local cuda_variant="$1"
39+
local deactivate_dir="$CONDA_PREFIX/etc/conda/deactivate.d"
40+
local deactivate_hook="$deactivate_dir/cuda${cuda_variant#cu}.sh"
41+
42+
mkdir -p "$deactivate_dir"
43+
rm -f "$deactivate_dir/cuda126.sh" "$deactivate_dir/cuda128.sh"
44+
cat > "$deactivate_hook" <<'HOOK'
45+
_embodiedgen_remove_path() {
46+
local variable_name="$1"
47+
local path_to_remove="$2"
48+
local current_value
49+
50+
if [[ -v "$variable_name" ]]; then
51+
current_value=":${!variable_name}:"
52+
else
53+
current_value=":"
54+
fi
55+
current_value="${current_value//:$path_to_remove:/:}"
56+
current_value="${current_value#:}"
57+
current_value="${current_value%:}"
58+
if [[ -n "$current_value" ]]; then
59+
export "$variable_name=$current_value"
60+
else
61+
unset "$variable_name"
62+
fi
63+
}
64+
65+
_embodiedgen_remove_path LD_LIBRARY_PATH "$CONDA_PREFIX/lib/embodiedgen-runtime"
66+
_embodiedgen_remove_path LD_LIBRARY_PATH "$CONDA_PREFIX/targets/x86_64-linux/lib"
67+
_embodiedgen_remove_path LIBRARY_PATH "$CONDA_PREFIX/targets/x86_64-linux/lib"
68+
_embodiedgen_remove_path CPATH "$CONDA_PREFIX/targets/x86_64-linux/include"
69+
unset -f _embodiedgen_remove_path
70+
unset EMBODIEDGEN_CUDA_VARIANT EMBODIEDGEN_RUNTIME_LIB
71+
unset CUDA_HOME CUDA_PATH CUDA_TARGET_LIB
72+
unset TORCH_CUDA_ARCH_LIST TCNN_CUDA_ARCHITECTURES
73+
HOOK
74+
}
75+
2376
detect_cuda_variant() {
2477
local cuda_variant="cu126"
2578

‎install/install_cu126.sh‎

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,43 @@ fi
2525

2626
log_info "Installing CUDA 12.6 toolkit into conda environment: $CONDA_PREFIX"
2727
log_info "Using conda executable: $CONDA_CMD"
28+
CONDA_CHANNEL_ARGS=()
29+
if [[ -n "${EMBODIEDGEN_CUDA_CHANNEL:-}" ]]; then
30+
CONDA_CHANNEL_ARGS=(
31+
--override-channels
32+
-c "$EMBODIEDGEN_CUDA_CHANNEL"
33+
)
34+
log_info "Using CUDA conda channel: $EMBODIEDGEN_CUDA_CHANNEL"
35+
fi
36+
2837
"$CONDA_CMD" install \
2938
-p "$CONDA_PREFIX" \
30-
--override-channels \
31-
-c nvidia \
32-
-c conda-forge \
39+
"${CONDA_CHANNEL_ARGS[@]}" \
3340
cuda-toolkit=12.6 \
3441
cuda-nvcc=12.6 \
3542
-y
3643

3744
log_info "Writing CUDA 12.6 activation hook into the conda environment..."
45+
prepare_cxx_runtime_libs
3846
mkdir -p "$CONDA_PREFIX/etc/conda/activate.d"
3947
rm -f "$CONDA_PREFIX/etc/conda/activate.d/cuda128.sh"
4048
cat > "$CONDA_PREFIX/etc/conda/activate.d/cuda126.sh" <<'HOOK'
4149
export EMBODIEDGEN_CUDA_VARIANT="cu126"
4250
export CUDA_HOME="$CONDA_PREFIX"
4351
export CUDA_PATH="$CONDA_PREFIX"
4452
export CUDA_TARGET_LIB="$CONDA_PREFIX/targets/x86_64-linux/lib"
45-
_cuda_conda_bin="$CONDA_PREFIX/bin"
53+
export EMBODIEDGEN_RUNTIME_LIB="$CONDA_PREFIX/lib/embodiedgen-runtime"
4654
_cuda_conda_lib="$CONDA_PREFIX/lib"
4755
_cuda_conda_lib64="$CONDA_PREFIX/lib64"
4856
_cuda_target_include="$CONDA_PREFIX/targets/x86_64-linux/include"
49-
_cuda_path=":${PATH:-}:"
50-
_cuda_path="${_cuda_path//:$_cuda_conda_bin:/:}"
51-
_cuda_path="${_cuda_path#:}"
52-
_cuda_path="${_cuda_path%:}"
53-
export PATH="$_cuda_conda_bin${_cuda_path:+:$_cuda_path}"
5457
_cuda_ld_path=":${LD_LIBRARY_PATH:-}:"
58+
_cuda_ld_path="${_cuda_ld_path//:$EMBODIEDGEN_RUNTIME_LIB:/:}"
5559
_cuda_ld_path="${_cuda_ld_path//:$CUDA_TARGET_LIB:/:}"
5660
_cuda_ld_path="${_cuda_ld_path//:$_cuda_conda_lib:/:}"
5761
_cuda_ld_path="${_cuda_ld_path//:$_cuda_conda_lib64:/:}"
5862
_cuda_ld_path="${_cuda_ld_path#:}"
5963
_cuda_ld_path="${_cuda_ld_path%:}"
60-
export LD_LIBRARY_PATH="$CUDA_TARGET_LIB${_cuda_ld_path:+:$_cuda_ld_path}"
64+
export LD_LIBRARY_PATH="$EMBODIEDGEN_RUNTIME_LIB:$CUDA_TARGET_LIB${_cuda_ld_path:+:$_cuda_ld_path}"
6165
_cuda_library_path=":${LIBRARY_PATH:-}:"
6266
_cuda_library_path="${_cuda_library_path//:$CUDA_TARGET_LIB:/:}"
6367
_cuda_library_path="${_cuda_library_path#:}"
@@ -68,10 +72,11 @@ _cuda_cpath="${_cuda_cpath//:$_cuda_target_include:/:}"
6872
_cuda_cpath="${_cuda_cpath#:}"
6973
_cuda_cpath="${_cuda_cpath%:}"
7074
export CPATH="$_cuda_target_include${_cuda_cpath:+:$_cuda_cpath}"
71-
unset _cuda_conda_bin _cuda_conda_lib _cuda_conda_lib64 _cuda_target_include
72-
unset _cuda_path _cuda_ld_path _cuda_library_path _cuda_cpath
75+
unset _cuda_conda_lib _cuda_conda_lib64 _cuda_target_include
76+
unset _cuda_ld_path _cuda_library_path _cuda_cpath
7377
export TORCH_CUDA_ARCH_LIST="${EMBODIEDGEN_TORCH_CUDA_ARCH_LIST:-8.9}"
7478
HOOK
79+
write_cuda_deactivation_hook "cu126"
7580

7681
log_info "Verifying CUDA 12.6 compiler from the active conda environment..."
7782
source "$CONDA_PREFIX/etc/conda/activate.d/cuda126.sh"

‎install/install_cu128.sh‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,26 @@ fi
4242
-y
4343

4444
log_info "Writing CUDA 12.8 activation hook into the conda environment..."
45+
prepare_cxx_runtime_libs
4546
mkdir -p "$CONDA_PREFIX/etc/conda/activate.d"
4647
rm -f "$CONDA_PREFIX/etc/conda/activate.d/cuda126.sh"
4748
cat > "$CONDA_PREFIX/etc/conda/activate.d/cuda128.sh" <<'HOOK'
4849
export EMBODIEDGEN_CUDA_VARIANT="cu128"
4950
export CUDA_HOME="$CONDA_PREFIX"
5051
export CUDA_PATH="$CONDA_PREFIX"
5152
export CUDA_TARGET_LIB="$CONDA_PREFIX/targets/x86_64-linux/lib"
52-
_cuda_conda_bin="$CONDA_PREFIX/bin"
53+
export EMBODIEDGEN_RUNTIME_LIB="$CONDA_PREFIX/lib/embodiedgen-runtime"
5354
_cuda_conda_lib="$CONDA_PREFIX/lib"
5455
_cuda_conda_lib64="$CONDA_PREFIX/lib64"
5556
_cuda_target_include="$CONDA_PREFIX/targets/x86_64-linux/include"
56-
_cuda_path=":${PATH:-}:"
57-
_cuda_path="${_cuda_path//:$_cuda_conda_bin:/:}"
58-
_cuda_path="${_cuda_path#:}"
59-
_cuda_path="${_cuda_path%:}"
60-
export PATH="$_cuda_conda_bin${_cuda_path:+:$_cuda_path}"
6157
_cuda_ld_path=":${LD_LIBRARY_PATH:-}:"
58+
_cuda_ld_path="${_cuda_ld_path//:$EMBODIEDGEN_RUNTIME_LIB:/:}"
6259
_cuda_ld_path="${_cuda_ld_path//:$CUDA_TARGET_LIB:/:}"
6360
_cuda_ld_path="${_cuda_ld_path//:$_cuda_conda_lib:/:}"
6461
_cuda_ld_path="${_cuda_ld_path//:$_cuda_conda_lib64:/:}"
6562
_cuda_ld_path="${_cuda_ld_path#:}"
6663
_cuda_ld_path="${_cuda_ld_path%:}"
67-
export LD_LIBRARY_PATH="$CUDA_TARGET_LIB${_cuda_ld_path:+:$_cuda_ld_path}"
64+
export LD_LIBRARY_PATH="$EMBODIEDGEN_RUNTIME_LIB:$CUDA_TARGET_LIB${_cuda_ld_path:+:$_cuda_ld_path}"
6865
_cuda_library_path=":${LIBRARY_PATH:-}:"
6966
_cuda_library_path="${_cuda_library_path//:$CUDA_TARGET_LIB:/:}"
7067
_cuda_library_path="${_cuda_library_path#:}"
@@ -75,11 +72,12 @@ _cuda_cpath="${_cuda_cpath//:$_cuda_target_include:/:}"
7572
_cuda_cpath="${_cuda_cpath#:}"
7673
_cuda_cpath="${_cuda_cpath%:}"
7774
export CPATH="$_cuda_target_include${_cuda_cpath:+:$_cuda_cpath}"
78-
unset _cuda_conda_bin _cuda_conda_lib _cuda_conda_lib64 _cuda_target_include
79-
unset _cuda_path _cuda_ld_path _cuda_library_path _cuda_cpath
75+
unset _cuda_conda_lib _cuda_conda_lib64 _cuda_target_include
76+
unset _cuda_ld_path _cuda_library_path _cuda_cpath
8077
export TORCH_CUDA_ARCH_LIST="${EMBODIEDGEN_TORCH_CUDA_ARCH_LIST:-12.0}"
8178
export TCNN_CUDA_ARCHITECTURES="${EMBODIEDGEN_TCNN_CUDA_ARCHITECTURES:-120}"
8279
HOOK
80+
write_cuda_deactivation_hook "cu128"
8381

8482
log_info "Verifying CUDA 12.8 compiler from the active conda environment..."
8583
source "$CONDA_PREFIX/etc/conda/activate.d/cuda128.sh"

0 commit comments

Comments
 (0)