hako-mikan / sd-webui-supermerger

model merge extention for stable diffusion web ui
GNU Affero General Public License v3.0
753 stars 112 forks source link

TypeError: can't convert cuda:0 device type tensor to numpy. (cosineAB + use cuda) #289

Closed zzz7xz closed 1 year ago

zzz7xz commented 1 year ago

cosineA / cosineBとuse cudaの併用で以下のエラーが出ました。

Traceback (most recent call last):
  File "J:\\stable-diffusion-webui\extensions\sd-webui-supermerger\scripts\mergers\mergers.py", line 106, in smergegen
    result,currentmodel,modelid,theta_0,metadata = smerge(
  File "J:\\stable-diffusion-webui\extensions\sd-webui-supermerger\scripts\mergers\mergers.py", line 349, in smerge
    sim, sims = precosine("A" in calcmode,theta_0,theta_1)
  File "J:\\stable-diffusion-webui\extensions\sd-webui-supermerger\scripts\mergers\mergers.py", line 588, in precosine
    sims = np.append(sims,simab.numpy())
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

mergers.pyの588行目を sims = np.append(sims,simab.detach().cpu().numpy()) に変更したところ、コード的に正しいかはわからないですが、 一応エラーは出なくなりました。

※追記です。 上記だけだとcosineBで同じエラーが出たので604行目を sims = np.append(sims, combined_similarity.detach().cpu().numpy()) に変更したところ、エラーは出なくなりました。

hako-mikan commented 1 year ago

cosineA / cosineBだとCPUに切り替えて計算する過程が入るので、エラーの有無にかかわらず、cudaを指定する意味がありません。

zzz7xz commented 1 year ago

こちらのPCではuse cudaで normal 6s -> 4s cosineA 24s -> 18s にそれぞれ短縮しました。

hako-mikan commented 1 year ago

なるほど他の部分で短縮になるのですね。 修正しておきました。ありがとうございます。

zzz7xz commented 1 year ago

ありがとうございます!修正確認しました。