Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
ComfyUI
Commits
799c08a4
"vscode:/vscode.git/clone" did not exist on "dd09f15fa7c98467c1411b85fed0c1d2c66d1861"
Commit
799c08a4
authored
Jul 19, 2023
by
comfyanonymous
Browse files
Auto disable cuda malloc on some GPUs on windows.
parent
0b284f65
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
78 additions
and
24 deletions
+78
-24
cuda_malloc.py
cuda_malloc.py
+77
-0
main.py
main.py
+1
-24
No files found.
cuda_malloc.py
0 → 100644
View file @
799c08a4
import
os
import
importlib.util
from
comfy.cli_args
import
args
#Can't use pytorch to get the GPU names because the cuda malloc has to be set before the first import.
def
get_gpu_names
():
if
os
.
name
==
'nt'
:
import
ctypes
# Define necessary C structures and types
class
DISPLAY_DEVICEA
(
ctypes
.
Structure
):
_fields_
=
[
(
'cb'
,
ctypes
.
c_ulong
),
(
'DeviceName'
,
ctypes
.
c_char
*
32
),
(
'DeviceString'
,
ctypes
.
c_char
*
128
),
(
'StateFlags'
,
ctypes
.
c_ulong
),
(
'DeviceID'
,
ctypes
.
c_char
*
128
),
(
'DeviceKey'
,
ctypes
.
c_char
*
128
)
]
# Load user32.dll
user32
=
ctypes
.
windll
.
user32
# Call EnumDisplayDevicesA
def
enum_display_devices
():
device_info
=
DISPLAY_DEVICEA
()
device_info
.
cb
=
ctypes
.
sizeof
(
device_info
)
device_index
=
0
gpu_names
=
set
()
while
user32
.
EnumDisplayDevicesA
(
None
,
device_index
,
ctypes
.
byref
(
device_info
),
0
):
device_index
+=
1
gpu_names
.
add
(
device_info
.
DeviceString
.
decode
(
'utf-8'
))
return
gpu_names
return
enum_display_devices
()
else
:
return
set
()
def
cuda_malloc_supported
():
blacklist
=
{
"GeForce GTX 960M"
,
"GeForce GTX 950M"
,
"GeForce 945M"
,
"GeForce 940M"
,
"GeForce 930M"
,
"GeForce 920M"
,
"GeForce 910M"
}
try
:
names
=
get_gpu_names
()
except
:
names
=
set
()
for
x
in
names
:
if
"NVIDIA"
in
x
:
for
b
in
blacklist
:
if
b
in
x
:
return
False
return
True
if
not
args
.
cuda_malloc
:
try
:
version
=
""
torch_spec
=
importlib
.
util
.
find_spec
(
"torch"
)
for
folder
in
torch_spec
.
submodule_search_locations
:
ver_file
=
os
.
path
.
join
(
folder
,
"version.py"
)
if
os
.
path
.
isfile
(
ver_file
):
spec
=
importlib
.
util
.
spec_from_file_location
(
"torch_version_import"
,
ver_file
)
module
=
importlib
.
util
.
module_from_spec
(
spec
)
spec
.
loader
.
exec_module
(
module
)
version
=
module
.
__version__
if
int
(
version
[
0
])
>=
2
:
#enable by default for torch version 2.0 and up
args
.
cuda_malloc
=
cuda_malloc_supported
()
except
:
pass
if
args
.
cuda_malloc
and
not
args
.
disable_cuda_malloc
:
env_var
=
os
.
environ
.
get
(
'PYTORCH_CUDA_ALLOC_CONF'
,
None
)
if
env_var
is
None
:
env_var
=
"backend:cudaMallocAsync"
else
:
env_var
+=
",backend:cudaMallocAsync"
os
.
environ
[
'PYTORCH_CUDA_ALLOC_CONF'
]
=
env_var
main.py
View file @
799c08a4
...
@@ -61,30 +61,7 @@ if __name__ == "__main__":
...
@@ -61,30 +61,7 @@ if __name__ == "__main__":
os
.
environ
[
'CUDA_VISIBLE_DEVICES'
]
=
str
(
args
.
cuda_device
)
os
.
environ
[
'CUDA_VISIBLE_DEVICES'
]
=
str
(
args
.
cuda_device
)
print
(
"Set cuda device to:"
,
args
.
cuda_device
)
print
(
"Set cuda device to:"
,
args
.
cuda_device
)
if
not
args
.
cuda_malloc
:
import
cuda_malloc
try
:
#if there's a better way to check the torch version without importing it let me know
version
=
""
torch_spec
=
importlib
.
util
.
find_spec
(
"torch"
)
for
folder
in
torch_spec
.
submodule_search_locations
:
ver_file
=
os
.
path
.
join
(
folder
,
"version.py"
)
if
os
.
path
.
isfile
(
ver_file
):
spec
=
importlib
.
util
.
spec_from_file_location
(
"torch_version_import"
,
ver_file
)
module
=
importlib
.
util
.
module_from_spec
(
spec
)
spec
.
loader
.
exec_module
(
module
)
version
=
module
.
__version__
if
int
(
version
[
0
])
>=
2
:
#enable by default for torch version 2.0 and up
args
.
cuda_malloc
=
True
except
:
pass
if
args
.
cuda_malloc
and
not
args
.
disable_cuda_malloc
:
env_var
=
os
.
environ
.
get
(
'PYTORCH_CUDA_ALLOC_CONF'
,
None
)
if
env_var
is
None
:
env_var
=
"backend:cudaMallocAsync"
else
:
env_var
+=
",backend:cudaMallocAsync"
os
.
environ
[
'PYTORCH_CUDA_ALLOC_CONF'
]
=
env_var
import
comfy.utils
import
comfy.utils
import
yaml
import
yaml
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment