mlc-ai / web-stable-diffusion

Bringing stable diffusion models to web browsers. Everything runs inside the browser with no server support.
https://mlc.ai/web-stable-diffusion
Apache License 2.0
3.56k stars 227 forks source link

How to use fp16 precison version of Stable Diffusion 1.5? #45

Open felixslu opened 1 year ago

felixslu commented 1 year ago

when I use fp16 version ,I got an capture error on my 3090TI.

pipe = StableDiffusionPipeline.from_pretrained( "runwayml/stable-diffusion-v1-5", revision='fp16', torch_dtype=torch.float16, local_files_only=True )

RuntimeError: "LayerNormKernelImpl" not implemented for 'Half'

felixslu commented 1 year ago

TVMError: Data types float32 and float16 must be equal for binary operators

[10:32:31] ~/tvm/tvm/src/relax/ir/block_builder.cc:64: Warning: BlockBuilder destroyed with remaining blocks! [2023-07-13 10:32:31,987] torch._dynamo.convert_frame: [ERROR] WON'T CONVERT forward /root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/transformers/models/clip/modeling_clip.py line 363 due to: Traceback (most recent call last): File "~/tvm/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 238, in call raise get_last_ffi_error() torch._dynamo.exc.BackendCompilerFailed: backend='_capture' raised: TVMError: Traceback (most recent call last): 12: TVMFuncCall 1: tvm::relax::InferBinaryArithOpOutDtype(tvm::relax::Call const&, tvm::relax::BlockBuilder const&, tvm::relax::TensorStructInfo const&, tvm::relax::TensorStructInfo const&) 0: tvm::relax::BlockBuilderImpl::ReportFatal(tvm::Diagnostic const&) File "/home/luting6/car/tvm/tvm/src/relax/ir/block_builder.cc", line 138 TVMError: Data types float32 and float16 must be equal for binary operators

Traceback (most recent call last): File "build.py", line 280, in mod, params = trace_models(torch_dev_key) File "build.py", line 144, in trace_models clip = trace.clip_to_text_embeddings(pipe) File "~/web-stable-diffusion/web_stable_diffusion/trace/model_trace.py", line 30, in clip_to_text_embeddings mod = dynamo_capture_subgraphs( File "~/tvm/tvm/python/tvm/relax/frontend/torch/dynamo.py", line 165, in dynamo_capture_subgraphs compiled_model(*params, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/_dynamo/eval_frame.py", line 294, in _fn return fn(*args, *kwargs) File "~/web-stable-diffusion/web_stable_diffusion/trace/model_trace.py", line 22, in forward text_embeddings = self.clip(text_input_ids)[0] File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1522, in _wrapped_call_impl return self._call_impl(args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1531, in _call_impl return forward_call(*args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/transformers/models/clip/modeling_clip.py", line 816, in forward return self.text_model( File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1522, in _wrapped_call_impl return self._call_impl(*args, *kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1531, in _call_impl return forward_call(args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/transformers/models/clip/modeling_clip.py", line 725, in forward encoder_outputs = self.encoder( File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1522, in _wrapped_call_impl return self._call_impl(*args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1531, in _call_impl return forward_call(*args, *kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/transformers/models/clip/modeling_clip.py", line 654, in forward layer_outputs = encoder_layer( File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1522, in _wrapped_call_impl return self._call_impl(args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1531, in _call_impl return forward_call(*args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/transformers/models/clip/modeling_clip.py", line 382, in forward hidden_states = self.layer_norm1(hidden_states) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1522, in _wrapped_call_impl return self._call_impl(*args, *kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1531, in _call_impl return forward_call(args, kwargs) File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/modules/normalization.py", line 190, in forward return F.layer_norm( File "/root/miniconda3/envs/tvm-build/lib/python3.8/site-packages/torch/nn/functional.py", line 2548, in layer_norm return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled) RuntimeError: "LayerNormKernelImpl" not implemented for 'Half'