윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT/스테이블 디퓨전
Stable Diffusion - FP16,  FP32 성능, 차이

FP16과 FP32 가 어떤 차이가 있을까 궁금해서 한번 테스트 했다. 결론을 먼저 말하자면, 그냥 FP16 사용하자. 사용하는데에는 결과물에 차이 없고 메모리를 더 적게 사용하기 때문에, FP16 사용해야 한다.

nVidia RTX 2060 에서 테스트했다. 참고로 20 시리즈는 FP16 이 FP32 보다 연산능력이 2배 좋다. 30 시리즈부터 FP16 과 FP32 연산능력이 동일하다.

이미지크기는  504 x 960 으로 했다.

① FP32 체크포인트, FP32 실행
chilloutmix_NiPrunedFp32Fix         FP32  5.1G -> 5.9G -> 7.7G -> 5.1G
Total progress: 100%|██████████████████████████████████████████████████████████████████| 28/28 [00:46<00:00,  1.48s/it]

② FP32 체크포인트, FP16 변환

chilloutmix_NiPrunedFp32Fix FP32 -> FP16  2.6 -> 10.1 -> 8.9G -> 3.0G
100%|████████████████████████████████████████████████████████████████████████████████| 28/28 [00:28<00:00,  1.01s/it]
Total progress: 100%|██████████████████████████████████████████████████████████████████| 28/28 [00:24<00:00,  1.15it/s]
Total progress: 100%|██████████████████████████████████████████████████████████████████| 28/28 [00:24<00:00,  1.57it/s]

③ FP32 체크포인트, FP16 실행

chilloutmix_NiPrunedFp32Fix         FP16  3.0G -> 3.3G -> 5.1G -> 3.0G
Total progress: 100%|██████████████████████████████████████████████████████████████████| 28/28 [00:17<00:00,  1.61it/s]

④ FP16 체크포인트, FP16 실행

chilloutmix_NiPrunedFp16Fix         FP16  3.0G -> 3.3G -> 3.0G
Total progress: 100%|██████████████████████████████████████████████████████████████████| 28/28 [00:17<00:00,  1.62it/s] 

② 은 FP32로 학습한 체크포인트를 FP16 으로 수행하기 전에 FP16 으로 변환하는데, 처음 체크포인트 변환시 10.1G, VAE 변환시 8.9G 를 소비한다. 재 실행시에는 변환작업이 없다.

생성한 이미지

사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지


메모리 사용


사용자 삽입 이미지



②③
사용자 삽입 이미지
사용자 삽입 이미지



사용자 삽입 이미지
사용자 삽입 이미지



------------

참고: GT1030, --lowvram

이미지크기: 384 x 768

① FP16 체크포인트, FP32 실행
chilloutmix_NiPrunedFp16Fix         FP32  1952MiB
Total progress: 100%|██████████████████████████████████████████████████████████████████| 20/20 [08:10<00:00, 25.61s/it]

② FP16 체크포인트, FP16실행
chilloutmix_NiPrunedFp16Fix         FP16  1350MiB
Total progress: 100%|██████████████████████████████████████████████████████████████████| 20/20 [05:10<00:00, 16.15s/it]
글쓴시간
분류 기술,IT/스테이블 디퓨전
Stable Diffusion - FP16 을 사용한 사진 네장

FP16 을 사용해서 생성했다. FP32 를 사용한 것과 차이는 느껴지지 않는다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
글쓴시간
분류 기술,IT
nVidia FP16,  FP32, FP64 성능

사용자 삽입 이미지


nVidia 제품에서, FP32 와 FP16 성능이 얼마나 차이나는지 확인해보려다가, 이왕 하는거 CUDA 가 들어있는 세대부터 FP16, FP32, FP64 성능을 정리해봤다. 기준이 되는 모델은 각 세대의 xx60 모델이다. 단위는 Flops 으로 GPU Database | TechPowerUp 에 나와있는걸 인용했다. 이 수치는 레퍼런스 스펙을 가질때의 이론상의 스펙이다.

아래 표에서 G 는 Giga, T 는 Tera 의 약어로 1T Flops = 1000G Flops 이다. flops 는 FLoating point Operations Per Second 의 약어로, 1초동안 수행할 수 있는 부동소수점 연산의 회수를 의미한다. FP16, FP32, FP64는 각각 16/32/64 비트 부동소수점 연산 회수를 의미한다.

Product     Code name    CUDA FP16          FP32        FP64            FP32향상비율
----------- ------------ ---- ------------- ----------- -------------- -----------
8600 Tesla x 92.80G x
9600 x 278.4G x 3.00
260 x 476.9G 59.62G (1:8) 1.71
460 Fermi 2.1 x 907.2G 75.60G (1:12) 1.90
560 x 1,089G 90.72G (1:12) 2.28
660 Kepler 3.0 x 1.981T 82.56G (1:24) 1.82
760 x 2.378T 99.07G (1:24) 1.20
960 Maxwell 5.2 x 2.413T 75.39G (1:32) 1.01
1060 6G Pascal 6.1 68.36G (1:64) 4.375T 136.7G (1:32) 1.81
1660 Turing 7.5 10.05T (2:1) 5.027T 157.1G (1:32) -
2060 12G 14.36T (2:1) 7.181T 224.4G (1:32) 1.64
3060 12G Ampere 8.6 12.74T 12.74T 199.0G (1:64) 1.77
4060 Ada Lovelace 8.9 15.11T 15.11T 236.2G (1:64) 1.18
5060 Blackwell 9.1 22.22T 22.22T 362.9G (1:64) 1.47 (예상치)

참고
3060 Ti Ampere 8.6 16.20T 16.20T 253.1G (1:64)
4060 Ti 16G Ada Lovelace 8.9 22.06T 22.06T 344.8G (1:64) 1.36
3070 8.6 20.31T 20.31T 317.4G (1:64)
4070 8.9 29.15T 29.15T 455.4G (1:64) 1.43

가장 처음 CUDA 를 선보인건 GeForce 8000번대 제품 부터다. 이때에는 FP32 만 지원되었다. 이후 200번대에 와서 FP64가 지원되고, 이후 1000 번대부터 부터 FP16이 지원되었다. FP16은 AI 연산에서 사용된다.

최근에 나온 40xx번대 GPU 는 FP8 도 지원하지만 텐서코어에서 지원하는 것이기 때문에 이 표에서 적지 않았다. 텐서코어를 이용한 4090 GPU 의 경우 FP8 성능은 660TFLOPS 정도다. (하지만 이 성능을 AI 에서 사용하지는 못한다. 말 그대로 텐서코어에서 지원하기 때문이다)

올해 7월 출시 예정인 4060으로 변경할 생각은 있긴 한데 VRAM 이 12GB 이 나오지 않는다고 한다. 이렇게 되면 4060Ti 16GB 모델로 변경해야할것 같다. 어쨌든 같은 성능에 전력소모는 확 줄어들것이기 때문에 쓰긴 써야 한다고 생각한다. 게임하는데에는 안좋지만 말이다. 하나 더 걸리는게 4060을 사용해도 예상대로라면 2060 FP16보다 1.35배 성능이 빨라진다. 가격은 1.35배 차이가 아닐 것 같은데 말이다. 에혀.

지금은 Stable Diffusion 실행시킬 때 FP32 을 사용하고 있지만, 이 표를 보니 FP16 써야 할것 같다. 지금 사용하고 있는 2060은 FP16 연산 능력이 FP32에 비해 2배 빠르기 때문이다. 또한 FP16으로 실행하면, 12GB VRAM 으로도 4K 이미지를 생성할 수 있을것 같기도 하고 말이다.

----

Stable Diffusion - FP16, FP32 성능

----

2023.04.17

RTX2060 12GB에서 FP16으로 이미지를 생성하고 있긴 하지만, 4K 이미지는 생성 못하고 있다. VRAM 메모리 부족때문이다. 뭔가 방법을 찾는 중.

----

2023.09.28

4K 이미지는 Upscaler 사용해서 생성하고있다.
글쓴시간
분류 기술,IT/스테이블 디퓨전
Stable Diffusion - R-ESRGAN General 4xV3 스케일 업

매일매일 그림 생성하는 작업. 물론 다른일도 병행하고 있다. 단지 배치 돌려두고 다른 일 하다가 생성된 그림 검토하고, 맘에 드는건 스케일 업 해서 블로그에 게시한다.

생각외로 스케일 업이 쉽지 않다. 몇 번은 시도해봐야 하고, 다양하게 파라메터를 줘야 성공하는듯.

스케일 업할 때 자주 사용하는 옵션은 R-ESRGAN General 4xV3 이고 Upscale by 2, Denoising strenth 0.4 이다. 나머지는 기본값으로 사용한다.

사용자 삽입 이미지

사용자 삽입 이미지
글쓴시간
분류 기술,IT/하드웨어 정보
3RSYS L610 Quiet 화이트

사용자 삽입 이미지

도저히 GPU 온도를 잡을 수가 없어서 결국 케이스 변경했다. 가격은 101,000 냥. 택배 2,500 별도다.

GPU 에서 발산하는 185 W 발열을 효과적으로 배출하는게 불가능했다. 공기순환 자체가 안되더라. 팬을 몇개 더 달아봤지만 안되었고, 결국 케이스 교체. 교체후에는 85도 육박하는 GPU 온도가 75도 정도로 내려갔다. 여태까지 케이스가 오래되고 낡아서 교체한경우는 있어도 발열때문에 교체한적은 없었다. 이런 경우는 처음이기도 하다.

사용자 삽입 이미지

나중에 수직 장착도 할 생각이라 수직 장착 지원되는 제품으로 골랐다. 하단 파워 서플라이와, 측면 흡/배기구도 고려했다.

사용자 삽입 이미지