서론

이전에 4090+OCuLink eGPU을 만들었다가 갑자기 욕심나서 4090FE를 구입했다가... 취소했습니다.

GPU가격도 부담스러운데 파워도 교체해야 되고 케이스도 갈아야 되고 부대 비용이 들 걸 생각하니

"이 돈이면 그냥 3090 2대 달린 PC를 만들겠는데?"하는 생각이 들더군요.


PCIe x8/x8 지원되는 AM4 보드 리퍼 제품과 알리 봄세일에 5700x를 구입하면서

본격적으로 PC 제작에 들어갑니다.


목표는 아래와 같았습니다.

  • 260만원을 목표로 최대한 저렴하게 제작
  • x8/x8 지원 보드 (x16/x4보다 학습 속도가 더 빠른 것 같습니다. 참고: https://arca.live/b/alpaca/103392129)
  • 3090을 제외한 나머지는 최대한 중고가 아닌 신품/리퍼을 이용


구입기

구입 기간: 3월 22일 ~ 5월 10일 (7주)

총 비용:

CPU

M/B

RAM

VGA

PWR

CASE

COOLER

SDD

기타

AMD Ryzen7 5700x

ASUS X570 PRIME PRO

에쎈코어 32GB 3200 x2

RTX 3090 x2

SuperFlower 1300F14XG

3RSYS T840

ALSEYE N400

Lexar NQ790 2TB

PCIe 4.0 라이저 케이블 

136,575원 (알리)

156,300원 (리퍼)

151,200원

1,830,000원 (중고)

255,160원

49,900원 (전시품)

16,900원

91,731원 (알리)

21,675원 (알리)

합계2,709,441


일단 목표는 어느 정도 맞췄습니다만,

구입 도중 3090 중고가가 85(±5)만원에서 95(±5)만원으로 10만원 올라 목표 달성 하지 못한 점은 아쉽네요.

중고 구입은 지양했지만 알리/리퍼/전시품 등을 사용했고, 쿨러나 SSD등 관심없는 제품은 최대한 저렴한 것을 구입했습니다.

알리든 리퍼든 초기 불량을 제외한 A/S는 포기한거나 다름 없다는 점은 감수하기로 하였습니다.


리퍼나 특가 제품은 시기가 맞아야 구할 수 있는 거라 현재 위와 같이 구입하기는 어렵습니다만,

부품 구입에 여유를 두고 구입하면 비슷하게 구성 가능할지도 모르겠습니다.

예를 들어, 현재는 11900F(알리) + Z590 x8/x8 지원보드(리퍼)로 그나마 비슷하게 구성 가능할 것 같습니다.


결과 사진: (시스템 팬은 사진 조명으로 켰고 평소에는 끕니다.)


조립후기:

  • 예상했지만, 라이저 케이블 없이 3090 두 대를 설치하기에는 무리가 있었습니다.
    최대한 작은 제품을 구입했는데도 3슬롯 간격으로 설치하기에는 발열이 걱정되더군요.
  • 최대한 저렴하면서 큰 케이스를 구입했지만, GPU를 가로+세로로 설치하고 옆 면을 닫기엔 쿨링 공간이 부족했습니다.
    50cm 라이저 케이블을 구입해 3090 한 대를 보드 위 파워 부근으로 올리면 가능할 거 같은데,
    추가 비용(7만원 예상)만큼의 가치가 있을지 몰라 우선은 옆 뚜껑 없이 쓰기로 했습니다.
    일단, 라이저 없이 설치 후 시스템 팬으로 온도 문제가 해결 가능한 지 확인해 볼 예정입니다.
  • 중고 제품 구매가 익숙하지 않아 우여곡절이 있었습니다.
    처음 구입한 이엠텍 3090은 발열 문제가 있었지만 A/S 기간 내라 택배비 만으로 처리했습니다.
    이후 구입한 Galax 3090은 2020년 생산된 채굴의심제품이었습니다만 일단 성능에는 문제가 없네요.
    최근 RTX 3090 중고가가 오른데다 글이 올라오는 족족 판매되는 상황이라 제작이 오래 걸리는 주요 원인이었습니다.
  • 파워 케이블이 8pin 4개 + 12vhpwr 기본 구성이라 3090 구입 시 8pin 2개 사용하는 제품으로 알아봤습니다.
    3개 사용하는 제품을 사게 되면 케이블을 추가 구매할 예정이었습니다만, (혹은 한 대를 12vhpwr를 사용하는 3090ti로)
    다행히 두 대 모두 8pin 2개 사용 모델로 구했습니다.
    PSU 1개로 GPU 2개를 구성하시려면, PSU에서 GPU 2개를 연결할 케이블이 있는지 꼭 확인하셔야 합니다.
  • GPU 다음으로 비싼 부품은 파워였습니다.
    이 떄문에 초기에는 파워 2대를 사용하려고 했습니다만, 구성이 번거로워 그냥 1300W를 구입했습니다.
    구입 이후 테스트 해보니 GPU를 300W로 전력제한하면 1000W로도 충분할 것 같습니다.


테스트

추론속도

kiqu 3.0bpw로 측정하였습니다.


  • 환경
  • 공통
    • Ubuntu 22.04 + text-generation-webui
    • RTX4090, RTX3090 모두 300W로 전력제한


kiqu 70b 3.0 / max_seq_len 16384 / cache_8bit

Device / gpu-split
20,1018,1016,12
memT/smemT/smemT/s
4090 + 3090
PCIe4.0 x8+x8
23127MiB/6834MiB27.6720683MiB/9274MiB26.4818587MiB/11372MiB26.71
4090 + 3090(oculink)
PCIe4.0 x16+x4
23120MiB/6818MiB27.5420676MiB/9268MiB26.8518580MiB/11366MiB26.89
3090 + 3090
PCIe4.0 x8+x8
22987MiB/6836MiB22.8320545MiB/9280MiB23.2518447MiB/11376MiB23.04


추론 속도는 4090+3090 보다 4~5t/s 정도 낮았습니다만 3090에 많이 할당될수록 성능 차는 적어질 거 같습니다.

전반적으로 출력 속도는 만족스럽습니다.


훈련속도

DDP

rm -r /tmp/test-clm; torchrun --nproc_per_node 2 examples/pytorch/language-modeling/run_clm.py --model_name_or_path openai-community/gpt2 --dataset_name wikitext --dataset_config_name wikitext-2-raw-v1 --do_train --output_dir /tmp/test-clm --per_device_train_batch_size 4 --max_steps 200

{

    "epoch": 0.6896551724137931,

    "total_flos": 836134502400000.0,

    "train_loss": 3.302017822265625,

    "train_runtime": 75.613,

    "train_samples": 2318,

    "train_samples_per_second": 21.16,

    "train_steps_per_second": 2.645

}


총 75.6초가 소요되었으며, 이전 4090+3090 테스트( https://arca.live/b/alpaca/103392129 )보다 2초 빠른 속도지만

3090 발열로 A/S를 보내 서멀 재도포하여 스로틀링이 사라진 게 영향을 준 것으로

3090 A/S 이후 4090+3090은 68초 정도 걸렸던 것으로 기억합니다.

4090+3090 구성은 3090에 의한 병목이 있을 수 있기에 4090+4090 결과를 예측하긴 어렵습니다만,

적어도 4090+3090 보다는 가성비가 좋습니다.


DDP 전력 대비 성능 테스트

추가적으로 전력 제한을 변경하면서 테스트 했습니다.

power limitRuntime (ms)
275W78.4918
300W75.2393
325W73.4636
350W72.1507
365W*71.6703

* 이엠텍 3090 최대 전력이 365W입니다. (galax 3090은 390W였고 상급기는 더 높을겁니다)



375W 테스트가 없어서 확실하진 않지만 스윗스폿은 300~350W정도로 보입니다.

275W는 전력 대비 성능이 떨어집니다. 저는 300W로 사용중입니다.


전력 소모에 걱정이 많아 이런 걸 구입해서 총 전력사용량도 확인 해봤습니다.

위 사진은 전력 제한 300W일 때로 약 760W를 사용했고

275W에서 측정 시에는 745W, 350W에서 856W 정도를 사용했습니다.


대략 GPU를 제외한 시스템이 160W를 사용한다고 생각하면 될 것 같습니다.

5700x의 TDP는 65W이므로, 더 높은 성능의 CPU의 경우 전력을 더 사용할 수 있겠네요.


300W로 전력제한하여 사용한다면 파워를 1000W로 구입해도 무방할 것 같습니다.

3090이나 4090이 피크전력이 높다고 하지만 ATX3.0 지원 파워는 피크전력 200%까지 대응합니다.


axolotl

example/llama-3/lora-8b.yml를 다음과 같이 수정하여 테스트 하였습니다.

17a18

> eval_sample_packing: false

35c36

< micro_batch_size: 2

---

> micro_batch_size: 1

소요 시간은 22분 30초 가량 걸렸으며, time 명령어를 사용했습니다.

time accelerate launch -m axolotl.cli.train lora-8b.yml

llama3-8b-lora (300W)

real    22m32.963s
user    43m35.006s
sys     0m20.186s

DDP 대비 GPU 온도가 높습니다.

그래픽카드 하단 전면에 120mm 시스템 팬을 추가해 68도까지 떨어뜨렸습니다만,

케이스 옆면을 닫은 상태에서는 아래 설명대로 70도까지 오릅니다.

총 전력 사용량은 780W 정도입니다.


전력 제한을 350W로 했을 때는 30초 가량 빨라졌습니다만,

온도는 케이스를 닫은 상태 기준 최대 78도까지 올라갑니다. 총 전력 사용량은 890W로 900W에 육박합니다.

llama3-8b-lora (350W)

real    22m4.270s
user    42m20.460s
sys     0m25.097s


온도 관리 (케이스 옆면 닫기)

먼지가 걱정되므로 케이스를 닫고 싶으니 시스템 팬을 추가해 발열이 줄여보았습니다.

먼저 라이저 없이 직결을 시도해보았으나 상단 GPU 온도가 너무 높아 기존 방식에서 팬만 추가하였습니다.


GPU 하단 전면에 흡기 팬 하나, 후면 PCIe 슬롯쪽에 배기 하나를 두고

알리에서 2달러주고 산 ㄱ자 브라켓으로 GPU 상단에 배기를 하나 총 3개의 팬을 설치했습니다.



axolotl llama3-lora-8b로 테스트 시 최대 70도를 유지하였습니다.

케이스를 열었을 때 대비 2도 정도 오르는데 그쳤습니다.


기타

  • 현재는 구입기에 적힌 구성에서 RAM 32GBx2, NVMe 2TB, HDD 3TBx2, 120mm 시스템 팬x3 가 추가되었습니다.
    다른 PC에서 쓰던 걸 가져온 걸로, 금액으로는 30만원이상 입니다.
  • axolotl로 example/mistral/mixtral-qlora-fsdp.yml (8x7B)로 훈련하려면 128GB RAM이 필요합니다.
    (RAM 피크 100GB, 평균 80GB 사용)
    3090 두 대로 예상 시간은 44시간이었습니다.
  • Llama3-70B qlora-fsdp는 axolotl에서 에러 발생하였고,
    answer.ai의 방식으로는 RAM 128GB로 훈련 가능하였습니다. (피크는 swap으로 해결 가능합니다.)
    예제에서 모델만 llama3로 변경하여 실제 훈련 시 3172m2.933s(52시간 52분)소요되었고 GPU온도는 평균 65도 최대 67도였으며 전력사용량은 660W 가량이었습니다.
  • 추론 만이 목적이라면, PCIe x4로 동작하는 x16 슬롯, OCuLink나 선더볼트 같은 eGPU를 활용해도 무방해 보입니다.
    학습의 경우 x8/x8 보드가 유리해 보였습니다.
  • PC를 마련하는 것보다 런팟 같은 클라우드를 이용하는 게 비용이 적게 들 수도 있습니다. (전기세ㄷㄷㄷ)
    경우에 따라선 더 편리할 수도 있습니다. (직접 PC를 구성하는데 생각보다 재미있었습니다머리가 아팠습니다.)
  • 현재 3090 매물도 적어지고 가격도 올랐기에 지금 시스템을 맞추기는 좋지 않을 수 있습니다.
    5090 출시, PCIe 5.0 (x4로 3.0 x16 속도) 등을 생각하면
    런팟 등 클라우드를 이용하며 1년 정도 상황을 지켜보는 게 좋을 것 같습니다.
    물론 당장 만들고 싶으면 맞춰야죠. 취미란 그런 거니까요.
  • 4090 + 3090 + 3090(eGPU)로 command-r 4bit를 돌려볼까 했지만, PC제작에 너무 시간을 뺏겨 포기하였습니다.
    다음에 여유가 되면 한 번 해보고 싶네요.
  • Ubuntu Desktop로 구동 시 WayLand를 비활성화하면, GUI를 유지한 채 VRAM 사용을 최소화할 수 있습니다.
  • axolotl 학습 시 NCCL timeout이 발생하면 BIOS에서 ACS를 비활성화 합니다.
  • 이제 제 머리만 업그레이드 하면 됩니다(...)


참고