AI 이미지/AUTOMATIC1111

AUTOMATIC1111 1.6.0 자동 업그레이드

하늘이푸른오늘 2023. 8. 31. 16:35

SDXL - anime artwork helper . anime style, key visual, vibrant, studio anime, highly detailed

현재 제가 사용중인 AUTOMATIC1111 버전은 1.5.1 입니다. 그동안 1.5.2, 1.6.0 RC 버전이 나왔고, 오늘 1.6.0 정식버전이 나왔습니다.

저는 그동안 새 버전이 나오면 자동으로 업그레이드 되는 걸로 생각했었는데, 여러번 껏다가 켜봐도 그대로 이길래 검색해보니, 자동 업데이트가 이루어지려면 약간의 작업이 필요하더군요.

먼저 stable-diffusion-webui 의 기본 디렉토리(저는 C:\sd\stable-diffusion-webui 입니다만, 자신의 환경에 따라 달라집니다)에 들어가서 webui-user.bat 를 편집하고 아래와 같이 "git pull"을 추가해줍니다.

자동 업데이트가 싫으신 분은 이 파일을 수정하지 마시고, 필요할 때  stable-diffusion-webui 의 기본 디렉토리에 들어가서 명령프롬프트로 "git pull" 을 실행시키시면 됩니다.

그리고 1.6.0으로 업그레이드를 시켰더니 controlNet쪽에서 warning 메시지가 뜹니다. 급하지 않으시면 1.6.1이 나온 뒤 업그레이드 하시는 게 좋을 듯 합니다.

webui-user.bat 편집

참고로 COMMANDLINE_ARGS 와 PYTORCH_CUDA_ALLOC_CONF에 추가된 내용은 메모리 관리 효율을 높이기 위한 것으로 필요하시면 아래를 그냥 복사해서 사용하셔도 됩니다. 

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS= --xformers  --force-enable-xformers --medvram
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
git pull

call webui.bat

 

다음으로 현재 실행중인 AUTOMATIC1111을 완전히 꺼 준뒤, 다시 webui-user.bat 파일을 실행시키면 여러가지 평소에 안보이던 메시지가 나온 뒤에 모델이 불러들이는 것까지 실행되면 정상적으로 업그레이드 된 것입니다.

정상적으로 실행 완료된 마지막 메시지

===

그런데 저의 경우엔.... 이 이후에도 아래처럼 에러 메시지가 잔뜩 나오네요. ㅠㅠ 아마도 제가 이것저것 테스트하느라 여러가지 extension을 깔았다가 지웠다 했기 때문이 아닌가 싶습니다.

Traceback (most recent call last):
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\gradio\routes.py", line 488, in run_predict
    output = await app.get_blocks().process_api(
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\gradio\blocks.py", line 1431, in process_api
    result = await self.call_function(
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\gradio\blocks.py", line 1103, in call_function
    prediction = await anyio.to_thread.run_sync(
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\anyio\to_thread.py", line 33, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
    return await future
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
    result = context.run(func, *args)
  File "C:\sd\stable-diffusion-webui\venv\lib\site-packages\gradio\utils.py", line 707, in wrapper
    response = f(*args, **kwargs)
  File "C:\sd\stable-diffusion-webui\modules\ui_extra_networks.py", line 392, in pages_html
    return refresh()
  File "C:\sd\stable-diffusion-webui\modules\ui_extra_networks.py", line 400, in refresh
    ui.pages_contents = [pg.create_html(ui.tabname) for pg in ui.stored_extra_pages]
  File "C:\sd\stable-diffusion-webui\modules\ui_extra_networks.py", line 400, in <listcomp>
    ui.pages_contents = [pg.create_html(ui.tabname) for pg in ui.stored_extra_pages]
  File "C:\sd\stable-diffusion-webui\modules\ui_extra_networks.py", line 162, in create_html
    self.items = {x["name"]: x for x in self.list_items()}
  File "C:\sd\stable-diffusion-webui\modules\ui_extra_networks.py", line 162, in <dictcomp>
    self.items = {x["name"]: x for x in self.list_items()}
  File "C:\sd\stable-diffusion-webui\extensions-builtin\Lora\ui_extra_networks_lora.py", line 69, in list_items
    for index, name in enumerate(networks.available_networks):
RuntimeError: dictionary changed size during iteration

그래서 할 수 없이 다시 설치하기로 했습니다. 재설치할 때에는 용량을 많이 차지하는 파일들은 따로 이동시켜두고 모두 지워버린 뒤에 처음부터 AUTOMATIC1111 설치방법에 따라 설치하면 됩니다. 저는 아래 폴더들만 따로 이동시켰습니다. 나머지는 필요한대로 더 추가하시면 됩니다.

  • C:\sd\stable-diffusion-webui\extensions\sd-webui-controlnet\models
  • C:\sd\stable-diffusion-webui\embeddings
  • C:\sd\stable-diffusion-webui\models\Stable-diffusion
  • C:\sd\stable-diffusion-webui\models\LoRA
  • C:\sd\stable-diffusion-webui\models\VAE

설치가 완료되면, 실행중인 AUTOMATIC1111을 다시 꺼버린 후, 이들 파일을 복구시키고 다시 실행시키면 됩니다. 다만, 맨 위에 있는 콘트롤넷 모델은 controlNet 확장을 설치한 후 복사해주어야 하고요. 이것만 뺴면 다시 설치하는데 한 30분 정도면 충분합니다.

그런데... controlNet 쪽에서 에러가 발생하네요... 아무래도 1.6.1을 기다렸어야 했나... 싶네요.

===

이번 업그레이드의 가장 중요한 점은 refiner를 보다 쉽게 사용할 수 있게 되었다는 것입니다. 예전에는 img2img로 들어가서 새로 모델을 불러들이고 세팅을 한 뒤에 실행해야 했었는데, 아래와 같이 Refiner 부분이 추가되어서 한꺼번에 실행할 수 있어 번거러움이 줄어 들었습니다. 

refiner 모델 섹션 추가

Refiner모델 오른쪽의 삼각형을 누르면 아래와 같이 확장됩니다. 왼쪽에는 Refiner 모델을 선택하면 되고, 오른쪽은 언제부터 Refiner 가 수행되는지를 선택하는가를 지정할 수 있습니다.

refiner 설정

예를 들어 현재 기본 설정인 Sampling steps = 20이고 Switch at = 0.8 인데, 이렇게 되면 20*0.8 = 16까지는 base 모델이 실행되고, 나머지 17~20까지는 Refiner 모델이 실행됩니다.

참고로, 위에서 체크포인트 파일을 잘 보시면 앞쪽에 "XL\" 이라고 시작하는데, 제가 SDXL 파일만 모두 "XL" 서브 폴더 속에 넣어두었기 때문입니다. SDXL 용 파일들도 늘어나게 될텐데, 관리하기 편하게 하기 위함입니다.

이렇게 변경해서 실행시켜보면, base 모델에서 refiner모델로 바꿀때 혹은 그 반대의 경우, 새로 모델을 불러들이는 것을 볼 수 있습니다. 이것을 방지하고 두 모델을 한번만 읽어들이도록 설정할 수 있습니다. Settings  페이지에서 [Stable Diffusion] 섹션에서 아래와 같이 설정해주면 됩니다. 그 바로 아래에 있는 "Only keep one model on device"가 기본으로 체크되어 있는데, 두개의 모델을 읽어들이더라도 VRAM에는 하나만 올라가도록 하고 나머지는 일반 RAM에 두도록 설정하는 옵션입니다. 메모리가 크지 않은 기계에서는 필수일 것 같네요.

체크포인트 파일 2개 읽어두기.


기타 변경내용은 AUTOMATIC1111 Release note를 참고하세요. 

민, 푸른하늘