AUTOMATIC1111 / stable-diffusion-webui-tensorrt

MIT License
310 stars 20 forks source link

How do I create an engine profile for adetailer? or is rttensor incompatiable with adetailer? #71

Open left1000 opened 9 months ago

left1000 commented 9 months ago

How do I create an engine profile for adetailer? or is rttensor incompatiable with adetailer?

It autodetects a region and so uses a variable resolution at all times, right?

Would I want to do something like dynamic minimum resolution 1x1 (which I can't because the minimum minimum is 256x256) maximum 512x512? Or would that be so broad as to be pointless? But there doesn't seem to be anyway to tell automatic1111webgui I want to use my rt engine profile for generating images, and for upscaling highres fix, but I want default u-net for adetailer?

I guess adetailer would need an update to make this happen? Should I write this issue there?

left1000 commented 8 months ago

I could've sworn I had tensorRT working with adetailer last week. But maybe I misremembered, because it won't work at all now, not even when telling adetailer to use fixed resolution. But given my read on what this error message means, I'm fairly sure I never had it working together (hence my above post.)

[E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) 11%|███████████████████▍ | 1/9 [00:05<00:46, 5.78s/it][E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) [E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) [E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) 44%|█████████████████████████████████████████████████████████████████████████████▊ | 4/9 [00:05<00:05, 1.12s/it][E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) [E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) [E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) 78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 7/9 [00:05<00:01, 1.86it/s][E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308. ) [E] 3: [executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/executionContext.cpp::nvinfer1::rt::ExecutionContext::validateInputBindings::2045, condition: profileMaxDims.d[i] >= dimensions.d[i]. Supplied binding dimension [1,308,768] for bindings[2] exceed min ~ max range at index 1, maximum dimension in profile is 231, minimum dimension in profile is 77, but supplied dimension is 308.

Anyone able to make sense of this?

My thinking is that 231x308 is the resolution adetailer is trying to use, my the minimum resolution in tensorRT is 256x256 so there is no possible way for me to make a profile for this that would make it work. (I told adetailer to use a higher resolution but it must be using this alternate resolution during it's autodetection step or some such?)

left1000 commented 8 months ago

In conclusion, I think actually, adetailer would work just fine with tensorRT if I could create an engine profile that went down to 128x128. A dynamic profile that covered say 128x128-256x256 or 128x128 through 384x384 would do the trick...

But it seems the minimum resolution you can set in this extension is 256x256, is there some reason for that? does NVidia not support tensorRT below that resolution?

DiabolicDiabetic commented 6 months ago

Not only does the resolution need to fall between the ranges of the profiles you have available, but they need to be divisible by 64, as well. While using Highres fix often pulls my adetailer resolutions above 256, I'm not sure they'll always be divisible by 64 (I think the default mask pad is +32).

It doesn't work for my workflows, currently, but you can force ADetailer to use specific resolutions in the inpainting menu.