A100 Setup

#!/usr/bin/env bash
set -euxo pipefail

echo "๐Ÿš€ MLX with CUDA ์™„์ „ ์„ค์น˜ ์‹œ์ž‘..."

## 0) ๊ธฐ๋ณธ ์˜์กด์„ฑ ์„ค์น˜
echo "๐Ÿ“ฆ ๊ธฐ๋ณธ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜..."
sudo apt-get update -y
sudo apt update -y
sudo apt-get install -y build-essential git wget curl python3.10-venv \\
                        pkg-config libopenblas-dev liblapack-dev
sudo apt-get install -y liblapack-dev libatlas-base-dev gfortran
sudo apt-get install -y liblapack-dev liblapack3 liblapack-dev liblapacke-dev

## 1) NVIDIA CUDA 12.4 & cuBLAS ์„ค์น˜
echo "๐Ÿ”ง NVIDIA CUDA 12.4 ์„ค์น˜..."
sudo apt-get install -y gnupg ca-certificates
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub> \\
  | sudo tee /etc/apt/keyrings/cuda.asc
echo "deb [signed-by=/etc/apt/keyrings/cuda.asc] \\
  <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/> /" \\
  | sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4 \\
                        libcublas-12-4 libcublas-dev-12-4

# CUDA ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
export CUDA_HOME=/usr/local/cuda-12.4
echo 'export CUDA_HOME=/usr/local/cuda-12.4' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH'       >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

## 2) ํŒŒ์ด์ฌ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •
echo "๐Ÿ Python ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •..."
# ๊ธฐ์กด ๊ฐ€์ƒํ™˜๊ฒฝ์ด ์žˆ์œผ๋ฉด ์ œ๊ฑฐ
if [ -d ~/mlxenv ]; then
    echo "โš ๏ธ  ๊ธฐ์กด mlxenv ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ..."
    rm -rf ~/mlxenv
fi

python3 -m venv ~/mlxenv
source ~/mlxenv/bin/activate
python3 -m pip install --upgrade pip

## 3) MLX ์†Œ์Šค ์™„์ „ ์ •๋ฆฌ ๋ฐ ๋‹ค์šด๋กœ๋“œ
echo "๐Ÿงน MLX ์†Œ์Šค ์™„์ „ ์ •๋ฆฌ..."
# ๊ธฐ์กด MLX ๋””๋ ‰ํ† ๋ฆฌ ์™„์ „ ์ œ๊ฑฐ
if [ -d ~/mlx ]; then
    echo "โš ๏ธ  ๊ธฐ์กด MLX ๋””๋ ‰ํ† ๋ฆฌ ์ œ๊ฑฐ..."
    rm -rf ~/mlx
fi

# pip ์บ์‹œ ์ •๋ฆฌ
python3 -m pip cache purge

# MLX ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ
git clone <https://github.com/ml-explore/mlx.git> ~/mlx
cd ~/mlx

# ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ์บ์‹œ ์™„์ „ ์ •๋ฆฌ
echo "๐Ÿ—‘๏ธ  ๋นŒ๋“œ ์บ์‹œ ์™„์ „ ์ •๋ฆฌ..."
rm -rf build/ dist/ *.egg-info
git clean -fdx
find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true

# ์‹œ์Šคํ…œ ์ž„์‹œ ํŒŒ์ผ ์ •๋ฆฌ
sudo rm -rf /tmp/pip-* 2>/dev/null || true

## 4) CUDA ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์žฌ์„ค์ • (๋นŒ๋“œ ์ „ ํ™•์ธ)
echo "๐Ÿ” CUDA ํ™˜๊ฒฝ ํ™•์ธ..."
export CUDA_HOME=/usr/local/cuda-12.4
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# CUDA ์„ค์น˜ ํ™•์ธ
if ! command -v nvcc &> /dev/null; then
    echo "โŒ CUDA ์ปดํŒŒ์ผ๋Ÿฌ(nvcc)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
fi

echo "โœ… CUDA ๋ฒ„์ „: $(nvcc --version | grep 'release' | awk '{print $5}' | cut -d',' -f1)"

# BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ
echo "๐Ÿ” BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ..."
ls -la /usr/lib/x86_64-linux-gnu/libopenblas.so* || {
    echo "โŒ OpenBLAS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
}

ls -la /usr/include/x86_64-linux-gnu/cblas.h || {
    echo "โŒ CBLAS ํ—ค๋”๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
}

## 5) MLX + CUDA ๋นŒ๋“œ (์„ฑ๊ณตํ•œ ์„ค์ • ์‚ฌ์šฉ)
echo "๐Ÿ”จ MLX CUDA ๋นŒ๋“œ ์‹œ์ž‘..."
CMAKE_ARGS="-DMLX_BUILD_CUDA=ON \\
            -DCUDAToolkit_ROOT=$CUDA_HOME \\
            -DCMAKE_CUDA_COMPILER=$CUDA_HOME/bin/nvcc \\
            -DBLAS_LIBRARIES=/usr/lib/x86_64-linux-gnu/libopenblas.so \\
            -DLAPACK_LIBRARIES=/usr/lib/x86_64-linux-gnu/libopenblas.so \\
            -DBLAS_INCLUDE_DIRS=/usr/include/x86_64-linux-gnu \\
            -DLAPACK_INCLUDE_DIRS=/usr/include/x86_64-linux-gnu" \\
python3 -m pip install . -v --config-settings cmake.args="-j$(nproc)"

## 6) ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์„ค์น˜
echo "๐Ÿ“ฆ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์„ค์น˜..."
pip install --upgrade transformers accelerate huggingface_hub sentencepiece

## 7) ์„ค์น˜ ํ™•์ธ
echo "๐Ÿงช MLX ์„ค์น˜ ํ™•์ธ..."
python3 -c "
import mlx.core as mx
print('โœ… MLX Core ๊ฐ€์ ธ์˜ค๊ธฐ ์„ฑ๊ณต')
print('๐Ÿ“Š MLX ๋ฒ„์ „:', mx.__version__)
try:
    print('๐Ÿš€ CUDA ์‚ฌ์šฉ ๊ฐ€๋Šฅ:', mx.metal.is_available())
except:
    print('โš ๏ธ  CUDA ์ƒํƒœ ํ™•์ธ ๋ถˆ๊ฐ€ (์ •์ƒ์ผ ์ˆ˜ ์žˆ์Œ)')
print('๐ŸŽฏ MLX ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ:')
x = mx.array([1, 2, 3])
print('   ๋ฐฐ์—ด ์ƒ์„ฑ ์„ฑ๊ณต:', x)
print('   ๊ณ„์‚ฐ ํ…Œ์ŠคํŠธ:', mx.sum(x))
"

## 8) ํ™˜๊ฒฝ ์ •๋ณด ์ถœ๋ ฅ
echo ""
echo "๐ŸŽ‰ MLX CUDA ๋นŒ๋“œ ์™„๋ฃŒ!"
echo "๐Ÿ“‹ ์„ค์น˜ ์ •๋ณด:"
echo "   - CUDA Home: $CUDA_HOME"
echo "   - Python ๊ฐ€์ƒํ™˜๊ฒฝ: ~/mlxenv"
echo "   - MLX ์†Œ์Šค: ~/mlx"
echo ""
echo "๐Ÿ”ง ์‚ฌ์šฉ๋ฒ•:"
echo "   1. ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”: source ~/mlxenv/bin/activate"
echo "   2. Python์—์„œ ์‚ฌ์šฉ: import mlx.core as mx"
echo ""
echo "โœ… ์„ค์น˜ ์™„๋ฃŒ!"

v2

#!/usr/bin/env bash
set -euxo pipefail

echo "๐Ÿš€ MLX with CUDA ์™„์ „ ์„ค์น˜ ์‹œ์ž‘..."

## 0) ๊ธฐ๋ณธ ์˜์กด์„ฑ ์„ค์น˜
echo "๐Ÿ“ฆ ๊ธฐ๋ณธ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜..."
sudo apt-get update -y
sudo apt update -y
sudo apt-get install -y build-essential git wget curl python3.10-venv \\
                        pkg-config libopenblas-dev liblapack-dev
sudo apt-get install -y liblapack-dev libatlas-base-dev gfortran liblapacke-dev

## 1) NVIDIA CUDA 12.4 & cuBLAS ์„ค์น˜
echo "๐Ÿ”ง NVIDIA CUDA 12.4 ์„ค์น˜..."
sudo apt-get install -y gnupg ca-certificates
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub> \\
  | sudo tee /etc/apt/keyrings/cuda.asc
echo "deb [signed-by=/etc/apt/keyrings/cuda.asc] \\
  <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/> /" \\
  | sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4 \\
                        libcublas-12-4 libcublas-dev-12-4

# CUDA ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
export CUDA_HOME=/usr/local/cuda-12.4
echo 'export CUDA_HOME=/usr/local/cuda-12.4' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH'       >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

## 2) ํŒŒ์ด์ฌ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •
echo "๐Ÿ Python ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •..."
# ๊ธฐ์กด ๊ฐ€์ƒํ™˜๊ฒฝ์ด ์žˆ์œผ๋ฉด ์ œ๊ฑฐ
if [ -d ~/mlxenv ]; then
    echo "โš ๏ธ  ๊ธฐ์กด mlxenv ๊ฐ€์ƒํ™˜๊ฒฝ ์ œ๊ฑฐ..."
    rm -rf ~/mlxenv
fi

python3 -m venv ~/mlxenv
source ~/mlxenv/bin/activate
python3 -m pip install --upgrade pip

## 3) MLX ์†Œ์Šค ์™„์ „ ์ •๋ฆฌ ๋ฐ ๋‹ค์šด๋กœ๋“œ
echo "๐Ÿงน MLX ์†Œ์Šค ์™„์ „ ์ •๋ฆฌ..."
# ๊ธฐ์กด MLX ๋””๋ ‰ํ† ๋ฆฌ ์™„์ „ ์ œ๊ฑฐ
if [ -d ~/mlx ]; then
    echo "โš ๏ธ  ๊ธฐ์กด MLX ๋””๋ ‰ํ† ๋ฆฌ ์ œ๊ฑฐ..."
    rm -rf ~/mlx
fi

# pip ์บ์‹œ ์ •๋ฆฌ
python3 -m pip cache purge

# MLX ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ
git clone <https://github.com/ml-explore/mlx.git> ~/mlx
cd ~/mlx

# ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ์บ์‹œ ์™„์ „ ์ •๋ฆฌ
echo "๐Ÿ—‘๏ธ  ๋นŒ๋“œ ์บ์‹œ ์™„์ „ ์ •๋ฆฌ..."
rm -rf build/ dist/ *.egg-info
git clean -fdx
find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
find . -name "*.pyc" -delete 2>/dev/null || true

# ์‹œ์Šคํ…œ ์ž„์‹œ ํŒŒ์ผ ์ •๋ฆฌ
sudo rm -rf /tmp/pip-* 2>/dev/null || true

## 4) CUDA ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์žฌ์„ค์ • (๋นŒ๋“œ ์ „ ํ™•์ธ)
echo "๐Ÿ” CUDA ํ™˜๊ฒฝ ํ™•์ธ..."
export CUDA_HOME=/usr/local/cuda-12.4
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# CUDA ์„ค์น˜ ํ™•์ธ
if ! command -v nvcc &> /dev/null; then
    echo "โŒ CUDA ์ปดํŒŒ์ผ๋Ÿฌ(nvcc)๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
fi

echo "โœ… CUDA ๋ฒ„์ „: $(nvcc --version | grep 'release' | awk '{print $5}' | cut -d',' -f1)"

# BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ
echo "๐Ÿ” BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ..."
ls -la /usr/lib/x86_64-linux-gnu/libopenblas.so* || {
    echo "โŒ OpenBLAS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
}

ls -la /usr/include/x86_64-linux-gnu/cblas.h || {
    echo "โŒ CBLAS ํ—ค๋”๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!"
    exit 1
}

# LAPACK ํ—ค๋” ํ™•์ธ ๋ฐ ๋งํฌ ์ƒ์„ฑ
echo "๐Ÿ”ง LAPACK ํ—ค๋” ํ™•์ธ ๋ฐ ์„ค์ •..."
if [ ! -f /usr/include/lapack.h ]; then
    echo "๐Ÿ“ lapack.h ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ..."
    LAPACK_HEADER=$(find /usr -name "lapack.h" -type f 2>/dev/null | head -1)
    if [ -n "$LAPACK_HEADER" ]; then
        sudo ln -sf "$LAPACK_HEADER" /usr/include/lapack.h
        echo "โœ… lapack.h ๋งํฌ ์ƒ์„ฑ: $LAPACK_HEADER -> /usr/include/lapack.h"
    else
        echo "โš ๏ธ  lapack.h๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด cblas.h๋กœ ๋Œ€์ฒด ๋งํฌ ์ƒ์„ฑ"
        sudo ln -sf /usr/include/x86_64-linux-gnu/cblas.h /usr/include/lapack.h
    fi
else
    echo "โœ… lapack.h๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."
fi

## 5) MLX + CUDA ๋นŒ๋“œ (์„ฑ๊ณตํ•œ ์„ค์ • ์‚ฌ์šฉ)
echo "๐Ÿ”จ MLX CUDA ๋นŒ๋“œ ์‹œ์ž‘..."
CMAKE_ARGS="-DMLX_BUILD_CUDA=ON \\
            -DCUDAToolkit_ROOT=$CUDA_HOME \\
            -DCMAKE_CUDA_COMPILER=$CUDA_HOME/bin/nvcc \\
            -DBLAS_LIBRARIES=/usr/lib/x86_64-linux-gnu/libopenblas.so \\
            -DLAPACK_LIBRARIES=/usr/lib/x86_64-linux-gnu/libopenblas.so \\
            -DBLAS_INCLUDE_DIRS=/usr/include/x86_64-linux-gnu \\
            -DLAPACK_INCLUDE_DIRS=/usr/include/x86_64-linux-gnu \\
            -DCMAKE_C_FLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu' \\
            -DCMAKE_CXX_FLAGS='-I/usr/include -I/usr/include/x86_64-linux-gnu'" \\
python3 -m pip install . -v --config-settings cmake.args="-j$(nproc)"

## 6) ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์„ค์น˜
echo "๐Ÿ“ฆ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์„ค์น˜..."
pip install --upgrade transformers accelerate huggingface_hub sentencepiece mlx-lm

# Hugging Face CLI ์„ค์น˜ ํ™•์ธ ๋ฐ PATH ์„ค์ •
echo "๐Ÿ”ง Hugging Face CLI ์„ค์ •..."
if ! command -v huggingface-cli &> /dev/null; then
    echo "โš ๏ธ  huggingface-cli PATH ์„ค์ •..."
    export PATH="$HOME/.local/bin:$PATH"
    echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
fi

# CLI ์„ค์น˜ ํ™•์ธ
if command -v huggingface-cli &> /dev/null; then
    echo "โœ… Hugging Face CLI ์„ค์น˜ ํ™•์ธ ์™„๋ฃŒ"
    huggingface-cli --version
else
    echo "โŒ Hugging Face CLI ์„ค์น˜ ์‹คํŒจ"
fi

## 7) ์„ค์น˜ ํ™•์ธ
echo "๐Ÿงช MLX ์„ค์น˜ ํ™•์ธ..."
python3 -c "
import mlx.core as mx
print('โœ… MLX Core ๊ฐ€์ ธ์˜ค๊ธฐ ์„ฑ๊ณต')
print('๐Ÿ“Š MLX ๋ฒ„์ „:', mx.__version__)
print('๐ŸŽฏ MLX ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ:')
x = mx.array([1, 2, 3])
print('   ๋ฐฐ์—ด ์ƒ์„ฑ ์„ฑ๊ณต:', x)
print('   ๊ณ„์‚ฐ ํ…Œ์ŠคํŠธ:', mx.sum(x))
print('๐Ÿ”ฅ ๋””๋ฐ”์ด์Šค ์ •๋ณด:', mx.default_device())
# CUDA ํ™•์ธ
try:
    import subprocess
    result = subprocess.run(['nvidia-smi'], capture_output=True, text=True)
    if result.returncode == 0:
        print('โœ… NVIDIA GPU ๊ฐ์ง€๋จ')
    else:
        print('โš ๏ธ  NVIDIA GPU ํ™•์ธ ๋ถˆ๊ฐ€')
except:
    print('โš ๏ธ  nvidia-smi ์‹คํ–‰ ๋ถˆ๊ฐ€')
"

## 8) ํ™˜๊ฒฝ ์ •๋ณด ์ถœ๋ ฅ
echo ""
echo "๐ŸŽ‰ MLX CUDA ๋นŒ๋“œ ์™„๋ฃŒ!"
echo "๐Ÿ“‹ ์„ค์น˜ ์ •๋ณด:"
echo "   - CUDA Home: $CUDA_HOME"
echo "   - Python ๊ฐ€์ƒํ™˜๊ฒฝ: ~/mlxenv"
echo "   - MLX ์†Œ์Šค: ~/mlx"
echo "   - Hugging Face CLI: $(which huggingface-cli 2>/dev/null || echo '์„ค์น˜๋จ')"
echo ""
echo "๐Ÿ”ง ์‚ฌ์šฉ๋ฒ•:"
echo "   1. ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”: source ~/mlxenv/bin/activate"
echo "   2. Python์—์„œ ์‚ฌ์šฉ: import mlx.core as mx"
echo "   3. ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ: huggingface-cli download MODEL_NAME --local-dir ./MODEL_DIR"
echo "   4. MLX ์–‘์žํ™”: python -m mlx_lm.quant.dwq --model MODEL_PATH"
echo ""
echo "๐Ÿ’ก ์˜ˆ์ œ ๋ช…๋ น์–ด:"
echo "   # ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ"
echo "   huggingface-cli download Qwen/Qwen3-30B-A3B --local-dir ./Qwen3-30B-A3B"
echo ""
echo "   # DWQ ์–‘์žํ™”"
echo "   python -m mlx_lm.quant.dwq --model ./Qwen3-30B-A3B --mlx-path ./Qwen3-30B-A3B-DWQ --bits 3"
echo ""
echo "โœ… ์„ค์น˜ ์™„๋ฃŒ!"

Install package

#!/usr/bin/env bash
set -euxo pipefail

echo "๐Ÿš€ MLX with CUDA ์™„์ „ ์„ค์น˜ ์‹œ์ž‘..."

## 0) ๊ธฐ๋ณธ ์˜์กด์„ฑ ์„ค์น˜
echo "๐Ÿ“ฆ ๊ธฐ๋ณธ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜..."
sudo apt-get update -y
sudo apt update -y
sudo apt-get install -y build-essential git wget curl python3.10-venv \\
                        pkg-config libopenblas-dev liblapack-dev
sudo apt-get install -y liblapack-dev libatlas-base-dev gfortran liblapacke-dev

## 1) NVIDIA CUDA 12.4 & cuBLAS ์„ค์น˜
echo "๐Ÿ”ง NVIDIA CUDA 12.4 ์„ค์น˜..."
sudo apt-get install -y gnupg ca-certificates
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub> \\
  | sudo tee /etc/apt/keyrings/cuda.asc
echo "deb [signed-by=/etc/apt/keyrings/cuda.asc] \\
  <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/> /" \\
  | sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4 \\
                        libcublas-12-4 libcublas-dev-12-4

# CUDA ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
export CUDA_HOME=/usr/local/cuda-12.4
echo 'export CUDA_HOME=/usr/local/cuda-12.4' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH'       >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

Broken package fix script

#!/bin/bash

echo "๐Ÿ”ง CUDA ํ‚ค๋ง ์ถฉ๋Œ ํ•ด๊ฒฐ ์ค‘..."

# 1. ๊ธฐ์กด CUDA sources.list ํŒŒ์ผ๋“ค ํ™•์ธ ๋ฐ ์ œ๊ฑฐ
echo "๐Ÿ“‹ ๊ธฐ์กด CUDA ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ • ํ™•์ธ..."
sudo find /etc/apt/sources.list.d/ -name "*cuda*" -exec rm -v {} \\;

# 2. ๊ธฐ์กด ํ‚ค๋ง ํŒŒ์ผ๋“ค ์ •๋ฆฌ
echo "๐Ÿ—๏ธ ๊ธฐ์กด ํ‚ค๋ง ํŒŒ์ผ ์ •๋ฆฌ..."
sudo rm -f /etc/apt/keyrings/cuda.asc
sudo rm -f /usr/share/keyrings/cuda-archive-keyring.gpg

# 3. APT ์บ์‹œ ์ •๋ฆฌ
echo "๐Ÿงน APT ์บ์‹œ ์ •๋ฆฌ..."
sudo rm -rf /var/lib/apt/lists/*
sudo apt-get clean

# 4. ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ CUDA ํ‚ค๋ง ์„ค์ •
echo "๐Ÿ”‘ CUDA ํ‚ค๋ง ๋‹ค์‹œ ์„ค์ •..."
sudo mkdir -p /etc/apt/keyrings
wget -qO - <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub> | sudo gpg --dearmor -o /etc/apt/keyrings/cuda-archive-keyring.gpg

# 5. CUDA ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‹ค์‹œ ์ถ”๊ฐ€
echo "๐Ÿ“ฆ CUDA ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‹ค์‹œ ์ถ”๊ฐ€..."
echo "deb [signed-by=/etc/apt/keyrings/cuda-archive-keyring.gpg] <https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/> /" | sudo tee /etc/apt/sources.list.d/cuda-toolkit.list

# 6. APT ์—…๋ฐ์ดํŠธ
echo "๐Ÿ”„ APT ์—…๋ฐ์ดํŠธ..."
sudo apt-get update

echo "โœ… CUDA ํ‚ค๋ง ์ถฉ๋Œ ํ•ด๊ฒฐ ์™„๋ฃŒ!"
echo "์ด์ œ CUDA ์„ค์น˜๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.