M1 MacBook Pro에서 안정적인 확산 실행

6920 단어 stablediffusion
원본 문서: https://zenn.dev/ktakayama/articles/6c627e0956f32c


AI 이미지 생성기 Stable Diffusion은 이제 오픈 소스입니다. 로컬 컴퓨터에서 실행하고 싶지만 MacBook Pro만 있으면 쉽지 않습니다.

https://github.com/CompVis/stable-diffusion

다음 스레드는 매우 유용합니다!

https://github.com/CompVis/stable-diffusion/issues/25

속도



제 MacBook Pro 14 사양입니다.
  • Apple M1 Pro 칩
  • 6개의 성능 코어와 2개의 효율성 코어가 있는 8코어 CPU
  • 14코어 GPU
  • 16코어 신경 엔진
  • 32GB 메모리

  • 이미지를 생성하는 동안 약 15~20GB의 메모리가 필요합니다. 약 5분에 6개의 이미지를 생성할 수 있습니다.

    모델 가져오기



    이 저장소를 등록하고 복제하십시오.

    https://huggingface.co/CompVis/stable-diffusion-v-1-4-original

    소스 코드 가져오기



    이 리포지토리의 apple-silicon-mps-support 분기에서 소스 코드를 가져옵니다.

    https://github.com/magnusviri/stable-diffusion/tree/apple-silicon-mps-support

    설정



    홈브류로 콘다와 러스트를 설치합니다.

    brew install miniconda rust
    


    conda용 셸 환경을 설정합니다. 나는 zsh를 사용합니다.

    conda init zsh
    


    conda env create를 실행하면 오류가 발생합니다.

    $ conda env create -f environment-mac.yaml
    Collecting package metadata (repodata.json): done
    Solving environment: failed
    
    ResolvePackageNotFound:
      - python=3.8.5
    


    환경에 맞게 environment-mac.yaml을 편집합니다. 특히 환경에 맞게 버전 번호를 변경하십시오. 예를 들어.

    diff --git a/environment-mac.yaml b/environment-mac.yaml
    index d923d56..c8a0a8e 100644
    --- a/environment-mac.yaml
    +++ b/environment-mac.yaml
    @@ -3,14 +3,14 @@ channels:
       - pytorch
       - defaults
     dependencies:
    -  - python=3.8.5
    -  - pip=20.3
    +  - python=3.9.12
    +  - pip=21.2.4
       - pytorch=1.12.1
       - torchvision=0.13.1
       - numpy=1.19.2
       - pip:
         - albumentations==0.4.3
    -    - opencv-python==4.1.2.30
    +    - opencv-python>=4.1.2.30
         - pudb==2019.2
         - imageio==2.9.0
         - imageio-ffmpeg==0.4.2
    


    활성화하고 모델에 연결합니다.

    conda activate ldm
    mkdir -p models/ldm/stable-diffusion-v1
    ln -s /path/to/stable-diffusion-v-1-4-original/sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt
    


    이미지 생성을 수행하십시오!



    txt2image를 실행할 때 PyTorch 관련 오류가 발생합니다.

    $ python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
    〜 skip 〜
    NotImplementedError: The operator 'aten::index.Tensor' is not current implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.
    


    야간 버전을 설치합니다.

    conda install pytorch torchvision torchaudio -c pytorch-nightly
    


    여전히 오류가 발생했습니다.

    $ python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
        return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
    RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
    


    이 오류를 수정하십시오.

    https://github.com/CompVis/stable-diffusion/issues/25#issuecomment-1221667017

    vi /opt/homebrew/Caskroom/miniconda/base/envs/ldm/lib/python3.9/site-packages/torch/nn/functional.py
    



    --- functional.py_      2022-08-23 17:07:29.000000000 +0900
    +++ functional.py       2022-08-23 17:07:31.000000000 +0900
    @@ -2506,9 +2506,9 @@ def layer_norm(
         """
         if has_torch_function_variadic(input, weight, bias):
             return handle_torch_function(
    -            layer_norm, (input, weight, bias), input, normalized_shape, weight=weight, bias=bias, eps=eps
    +            layer_norm, (input.contiguous(), weight, bias), input, normalized_shape, weight=weight, bias=bias, eps=eps
             )
    -    return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
    +    return torch.layer_norm(input.contiguous(), normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
    


    전부 괜찮아! 엄청난!!!

    $ python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
    ...
    Your samples are ready and waiting for you here:
    outputs/txt2img-samples
    
    Enjoy.
    

    좋은 웹페이지 즐겨찾기