본문 바로가기

스테이블디퓨전 xformers 오류 - Extention 업데이트 오류 해결 방법

주먹쥐고 일어서 발행일 : 2023-03-19

1. 스테이블디퓨전 webUI xformers 오류 해결방법

xformers 기능

스테이블디퓨전 webUI를 로컬 컴퓨터에 설치 이후, xformers 오류가 발생하는 경우가 있습니다. xformers가 무엇인지도 생소하여 당황스러울 수 있습니다. xformers 라이브러리는 엔비디아 GPU에서만 사용할 수 있습니다. xformers 라이브러리의 주요 기능이미지 생성 속도를 높이고 VRAM 사용을 줄여 이미지 생성 시간을 단축시키는 역할을 합니다. 엔비디아 Geforce 1000 이상의 GPU를 사용하고 있다면, xformers 기능이 제대로 가동될 수 있도록 하는 것이 효율적입니다.

xformers 오류 해결방법

스테이블디퓨전 실행을 하기 위해 보통 webui-user.bat 파일을 더블클릭하실 겁니다. 그런데 실행화면에서 xformers 설치되지 않았다는 등의 오류 문구를 보실 수가 있는데, 그런 경우 webui-user.bat 파일을 수정 후 재실행하면 해결됩니다. xformers 오류 해결을 위한 webui-user.bat 파일 수정방법은 아래와 같습니다.

 

- 첫째, webui-user.bat 파일 위에서 마우스 우클릭 -> 더 많은 옵션표시 -> 편집을 누릅니다.

 

- 둘째, 메모장 화면이 나오면 'set COMMANDLINE_ARGS=' 우측에 '--xformers' 입력합니다.

@echo off

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS= --xformers

call webui.bat

 - 셋째, 저장을 하고 webui-user.bat 재실행하면 xformers 오류 없이 정상 설치됨을 확인할 수 있습니다.

xformers 정상설치중 화면
webui-user.bat 파일 수정 후 xformers 정상설치중 화면

 

2. 스테이블디퓨전 webUI Extensions 업데이트 오류 해결방법

스테이블디퓨전 webUI를 로컬 컴퓨터에 설치하고, Extentions 화면에서 Check for updates를 눌렀는데, 오류가 발생하여 업데이트를 할 수 없는 경우가 있습니다. 이것은 어떠한 문제로 인하여 git API 변경으로 발생한 문제인데, 아래와 같이 진행하면 오류사항을 해결하고 업데이트할 수 있습니다.

 

- 첫째, C:\SD\stable-diffusion-webui\modules 폴더로 이동합니다.

 

- 둘째, Ctrl+F 를 눌러 텍스트 검색으로 해당 부분을 찾아 수정하여 줍니다. 저장 후 재실행하면 해결됩니다.

 

for fetch in repo.remote().fetch("--dry-run"): -> for fetch in repo.remote().fetch(dry_run=True):

repo.git.fetch('--all') -> repo.git.fetch(all=True)
repo.git.reset('--hard', 'origin') -> repo.git.reset('origin', hard=True)

import os
import sys
import traceback

import time
import git

from modules import paths, shared

extensions = []
extensions_dir = os.path.join(paths.data_path, "extensions")
extensions_builtin_dir = os.path.join(paths.script_path, "extensions-builtin")

if not os.path.exists(extensions_dir):
    os.makedirs(extensions_dir)

def active():
    return [x for x in extensions if x.enabled]


class Extension:
    def __init__(self, name, path, enabled=True, is_builtin=False):
        self.name = name
        self.path = path
        self.enabled = enabled
        self.status = ''
        self.can_update = False
        self.is_builtin = is_builtin
        self.version = ''

        repo = None
        try:
            if os.path.exists(os.path.join(path, ".git")):
                repo = git.Repo(path)
        except Exception:
            print(f"Error reading github repository info from {path}:", file=sys.stderr)
            print(traceback.format_exc(), file=sys.stderr)

        if repo is None or repo.bare:
            self.remote = None
        else:
            try:
                self.remote = next(repo.remote().urls, None)
                self.status = 'unknown'
                head = repo.head.commit
                ts = time.asctime(time.gmtime(repo.head.commit.committed_date))
                self.version = f'{head.hexsha[:8]} ({ts})'

            except Exception:
                self.remote = None

    def list_files(self, subdir, extension):
        from modules import scripts

        dirpath = os.path.join(self.path, subdir)
        if not os.path.isdir(dirpath):
            return []

        res = []
        for filename in sorted(os.listdir(dirpath)):
            res.append(scripts.ScriptFile(self.path, filename, os.path.join(dirpath, filename)))

        res = [x for x in res if os.path.splitext(x.path)[1].lower() == extension and os.path.isfile(x.path)]

        return res

    def check_updates(self):
        repo = git.Repo(self.path)
        for fetch in repo.remote().fetch(dry_run=True):
            if fetch.flags != fetch.HEAD_UPTODATE:
                self.can_update = True
                self.status = "behind"
                return

        self.can_update = False
        self.status = "latest"

    def fetch_and_reset_hard(self):
        repo = git.Repo(self.path)
        # Fix: `error: Your local changes to the following files would be overwritten by merge`,
        # because WSL2 Docker set 755 file permissions instead of 644, this results to the error.
        repo.git.fetch(all=True)
        repo.git.reset('origin', hard=True)


def list_extensions():
    extensions.clear()

    if not os.path.isdir(extensions_dir):
        return

    paths = []
    for dirname in [extensions_dir, extensions_builtin_dir]:
        if not os.path.isdir(dirname):
            return

        for extension_dirname in sorted(os.listdir(dirname)):
            path = os.path.join(dirname, extension_dirname)
            if not os.path.isdir(path):
                continue

            paths.append((extension_dirname, path, dirname == extensions_builtin_dir))

    for dirname, path, is_builtin in paths:
        extension = Extension(name=dirname, path=path, enabled=dirname not in shared.opts.disabled_extensions, is_builtin=is_builtin)
        extensions.append(extension)

 

스테이블 디퓨전 한글 적용 및 Civitai-Helper 트리거워드 사용방법

 

스테이블 디퓨전 한글 적용 및 Civitai-Helper 트리거워드 사용방법

이번 포스팅에서는 스테이블 디퓨전에 한글을 적용하는 방법과, Civitai-Helper를 설치하여 모델 이미지도 확인하면서 Trigger Words를 클릭만으로 간편하게 프롬프트에 입력하는 방법을 알아보겠습니

agilewith.com

 

댓글