Ubuntu 24.04 에서 그래픽카드 (GPU) 선택적 비활성화 하기

AI|2025. 4. 14. 17:02
반응형

일반적으로 GPU 는 1, 2, 4, 8, 16, ... 의 개수로 동작을 하기 때문에 애매한 수의 그래픽카드는 낭비일 수 있습니다.

아래에서는 필요에따라 그래픽카드를 비활성화 하는 방법을 안내합니다.

본 환경은 Ubuntu 24.04 에서 진행하였습니다.

 

 

1. 장착된 그래픽카드 확인

 

# lspci -nn | grep -i nvidia
4f:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000[10de:2230] (rev a1)
4f:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
52:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000] [10de:2230] (rev a1)
52:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
53:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000] [10de:2230] (rev a1)
53:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
56:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000] [10de:2230] (rev a1)
56:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
57:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000] [10de:2230] (rev a1)
57:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
ce:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102GL [RTX A6000] [10de:2230] (rev a1)
ce:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
d1:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d2:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d5:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d6:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)

 

여기에서는 A6000 이 6개, 6000ADA 가 4개로 확인되었습니다.

테스트를 위해 A6000 6개를 비활성화 할 것인데, 방법은 특정 GPU의 PCI 장치를 커널이 무시하도록 설정하는 것입니다.

 

 

2. 일시적 제거

 

여기서 맨 왼쪽 열(4f:00.0, 4f:00.1 등 오디오장치 포함)이 PCI 버스 및 슬롯 번호인데 이것에 아래값을 입력하면 간단히 제거됩니다.

삭제할 모든 행에 대해 명령을 수행합니다.

echo "none" > "/sys/bus/pci/devices/0000:4f:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:4f:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:4f:00.1/driver_override"

echo 1 > "/sys/bus/pci/devices/0000:4f:00.1/remove"

echo "none" > "/sys/bus/pci/devices/0000:52:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:52:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:52:00.1/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:52:00.1/remove"

echo "none" > "/sys/bus/pci/devices/0000:53:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:53:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:53:00.1/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:53:00.1/remove"

echo "none" > "/sys/bus/pci/devices/0000:56:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:56:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:56:00.1/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:56:00.1/remove"

echo "none" > "/sys/bus/pci/devices/0000:57:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:57:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:57:00.1/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:57:00.1/remove"

echo "none" > "/sys/bus/pci/devices/0000:ce:00.0/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:ce:00.0/remove"

echo "none" > "/sys/bus/pci/devices/0000:ce:00.1/driver_override"
echo 1 > "/sys/bus/pci/devices/0000:ce:00.1/remove"

 

재부팅 없이도 장치가 제거된 것이 확인됩니다.

# lspci -nn | grep -i nvidia

d1:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d2:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d5:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)
d6:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [RTX 6000 Ada Generation] [10de:26b1] (rev a1)

 

 

3. 영구적 제거

 

udev 설정 등 몇가지 방법이 있지만 여기에서는 가장 쉬운 방법으로 진행합니다.

위에서 사용했던 echo 명령 행 전부를 사용자 .bashrc 파일에 넣어주세요.

로그인 할 때마다 장치가 비활성화 됩니다.

 

반응형

'AI' 카테고리의 다른 글

GGUF 파일을 Llama.cpp 도구로 실행하는 방법  (0) 2025.04.14

댓글()

GGUF 파일을 Llama.cpp 도구로 실행하는 방법

AI|2025. 4. 14. 16:25
반응형

Ubuntu 24.04 기준으로 작성하였습니다.

모델 다운로드 디렉토리(/data/Llama4/Q4_K_M/)는 임의로 정하였습니다.

 

 

1. 모델 다운로드

 

모델은 기본적으로 파일 사이즈가 크므로, 용량이 넉넉한 디렉토리를 선택해야 합니다.

 

# mkdir -p /data/Llama4/Q4_K_M/

# cd /data/Llama4/Q4_K_M

# wget https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-GGUF/resolve/main/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M-0000{1..2}-of-00002.gguf

 

 

2. Llama.cpp 다운로드

 

Llama.cpp 는 모델을 간단히 가동, 병합, 양자화 등을 할 수 있는 도구 입니다.

 

# apt -y install cmake libopenblas-dev g++
# git clone https://github.com/ggerganov/llama.cpp.git

# cd llama.cpp
# mkdir build
# cd build
# cmake ..

# cmake --build . --config Release

 

 

3. 분할된 파일 합치기

 

# cd bin

# ./llama-gguf-split --merge /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf

 

※ 양자화 (양자화는 이미 되어있으므로, 원본을 양자화하는 방법이 필요한 분만 참고하세요)

# ./llama-quantize  /data/Llama4/BF16/Llama-4-Scout-17B-16E-Instruct-BF16-00001-of-00005.gguf /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf Q4_K_M

 

 

4. LLM 실행

 

1) 로컬 질의

로컬에서 간단히 실행하고 질의합니다.

# ./llama-cli -m /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf -p "오늘은 며칠이야?"

 

2) API 사용

API를 사용해 외부 네트워크에서도 접근 허용합니다.

# ./llama-server -m /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf --host 0.0.0.0 --port 8080

 

다음과 같이 다른 터미널이나 외부 네트워크의 시스템에서 질의해 봅니다.

# apt -y install jq

# curl http://{서버IP}:8080/completion -H "Content-Type: application/json" -d '{
  "prompt": "오늘은 며칠이야?",
  "n_predict": 100
}' | jq

 

반응형

'AI' 카테고리의 다른 글

Ubuntu 24.04 에서 그래픽카드 (GPU) 선택적 비활성화 하기  (0) 2025.04.14

댓글()