요즘에 가장 핫한 AI 알고리즘이 Transformer 라는 알고리즘이다. 대규모 언어 모델을 구현할때 많이 사용한다. xFormers 는 페이스북에서 만든 Transformers 기반의 성능향상 파이썬 모듈이다 nVidia CUDA 에 최적화되어있다. Stable Duffusion 에도 Transformers 가 있기 때문에, 이 부분을 성능향상시켜준다.
Transformer 아키텍처.라고 한다.
몇일전에 xFormers 0.0.20 이 나왔다. 성능이꽤 많이 향상되었다고 해서, 한번 써 봤다.
2023.05.26 현재 Stable Diffusion webUI에서 소스 수정없이 설치되는 xFormers 버전은 0.0.17 이다. 조만간 0.0.20 을 사용하도록 변경할 것으로 생각한다.
필자는 RTX 2060 12G 을 사용하고 있다. nVidia 홈페이지에서 윈도11용 드라이버를 새로 받았고, Stable Diffusion 디렉토리의 venv디렉토리를 지우고, launch.py 를 수정해 xFormers 0.0.20 을 설치했다.
결론부터 말하자면, 꽤 만족할만한 성능 향상이 있었다. xFormers 0.0.17 으로 2:27 걸리던 이미지 생성시간이 XFormers 0.0.20 으로 업그레이드 하니 2:04 이 걸렸다. 20여초나 단축한 셈. 매우 많은 성능향상이다.
윈도 11에서 사진 앱을 실행한 후 종료했지만, Shell Infrastructure 라는 프로세스가 계속 작동하는 현상이 발생했다. 이로 인해 CPU 점유율이 코어 1개를 전부 소비하는 현상이 발생했다. 아무래도 이건 버그인듯 한데, MS 에서는 아직 패치를 발표하진 않았다. 인터넷 살펴보니 최소 작년부터 발생한 버그인거 같다.
우선 증상 확인은 아래와 같이 할 수 있다. 작업관리자에서 Sheel Infrastructure Host 가 CPU 를 많이 점유하고 있다.
해결방법은 1. 앱을 초기화한 후 2. Shell Infrastructure Host 를 강제로 종료하면 된다.
- 앱을 초기화하는 건 아래 사진처럼 설정 - 앱 - 설치된 앱에서, Microsoft 사진을 찾아 들어가면 하단의 초기화 섹션에 "복구", "초기화" 버튼이 있다. 차례대로 눌러준다. 강제종료하는건 작업관리에서 Shell Infrastructure Host 을 선택한 후 상단의 "작업 끝내기" 클릭하면 된다.
- EP-DN975, EP-DX510은 100W 충전을 지원하는 제품이다. 막상 써보면 전선 굵기가 다른 제품과 차이 많다는걸 알 수 있다. USB 케이블 치고는 구부리는데 힘이 들어간다.
- EP-TA800 충전기(삼성 25W 고속 충전기, 노트10+ 번들) 에서 EP-DN970 (노트10+ 번들) 케이블을 사용해 Galaxy S23 Ultra를 고속충전하려는데, 충전이 되었다 안되었다 해서 케이블을 EP-DN975 으로 교체해보니깐 문제 없었다. 그냥 케이블이 망가진걸지도 모르겠지만 데이터 연결은 정상적으로 되었다. 고속 충전만 안된셈. 어쨌든 방법을 알아냈으니 그걸로 만족. 에혀...
LoRA 적용시 오류 - output with shape {param} doesn't match the broadcast shape {param}
Traceback (most recent call last): File "C:\stable-diffusion-webui\extensions\a1111-sd-webui-lycoris\..\..\extensions-builtin/Lora\lora.py", line 215, in load_loras lora = load_lora(name, lora_on_disk.filename) File "C:\stable-diffusion-webui\extensions\a1111-sd-webui-lycoris\..\..\extensions-builtin/Lora\lora.py", line 176, in load_lora module.weight.copy_(weight) RuntimeError: output with shape [4, 320, 1, 1] doesn't match the broadcast shape [4, 320, 3, 3]
이와같이 나오는 이유는 적용하려는 파일(.safetensor, .pt 파일)이 LoRA용 파일이 아니기 때문이다. 이런 파일은 LoRA 의 확장 규격을 사용한 거라, 현재 Stable Diffusion WebUI 에서 사용하려면 LyCORIS 사용해야한다. 파일이름, 파일 크기만 가지고는 LoRA 인지 LyCORIS 용인지 명확하게 구분이 안된다. (그래도 LyCORIS 용 파일은 파일 크기가 수십메라 정도로 작다)
프롬프트도 <lyco:***:1.0> 처럼 사용해야 한다. <lora:***:1.0> 이 아니다.
- 확장 LoRA 는 [*, *, 1, 1] 에서 [*, *, 3, 3] 과 같이 뒤의 2개 숫자가 1 에서 3으로 변경되었다. (이건 프로그래밍에서 4차원 배열 정도로 생각하면 된다) 이게 확장 LoRA 규격이다.
----
2023.05.26 추가
Stable Diffusion WebUI 를 최신 버전으로 패치하면 LoRA 로 적용 된다. (LyCORIS 쓸 필요 없다) 기존에는 [*, *, 3, 3] 형식의 LoRA 를 지원하지 않았다고 한다.
체크포인트 변경하고 생성한 이미지들이다. 순수하게 AI 로만 생성하고 후보정(예를 들어 포토샵을 사용한 보정)도 하지 않은 AI 가 생성한 이미지 그대로 게시한다.
실사처럼 보이지도, 만화처럼 보이지도 않는, AI 로만 그릴 수 있는 디테일 있는 그림을 원했고, 이제 어느정도 맞는거 같다. 앞으로도 계속 이미지 생성 하면서 조금씩 변하겠지만 말이다. SD 2.1 도 아직 사용하지 않고 있는거라, 앞으로도 꽤 많은 변화가 있긴 할거 같다. 몇개월, 몇년 후에 서서히 바뀌는 그림들 보면 재미있을것 같다.