Uploaded sanitized BC250/ROCm Repository.
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
BC-250: Test CLIP on CPU only (bypass GPU kernel compilation).
|
||||
"""
|
||||
import os, sys, time
|
||||
|
||||
os.environ["HSA_OVERRIDE_GFX_VERSION"] = "10.1.0"
|
||||
os.environ["HSA_ENABLE_SDMA"] = "0"
|
||||
os.environ["HIP_VISIBLE_DEVICES"] = "0"
|
||||
os.environ["BC250_SOFTMAX_THRESHOLD"] = "512"
|
||||
|
||||
sys.path.insert(0, "/home/fabian/ComfyUI")
|
||||
|
||||
print("[T] Importing...", flush=True)
|
||||
import bc250_softmax_patch
|
||||
import torch
|
||||
import safetensors.torch
|
||||
|
||||
# Check file size
|
||||
clip_path = "/home/fabian/ComfyUI/models/text_encoders/gemma2_2b_lumina2.safetensors"
|
||||
fsize = os.path.getsize(clip_path) / (1024*1024*1024)
|
||||
print(f"[T] CLIP file: {fsize:.2f} GB", flush=True)
|
||||
|
||||
# Load directly to see what's in it
|
||||
print(f"[T] Loading safetensors headers...", flush=True)
|
||||
t0 = time.time()
|
||||
with safetensors.torch.safe_open(clip_path, framework="pt", device="cpu") as f:
|
||||
keys = list(f.keys())
|
||||
print(f"[T] Keys: {len(keys)}", flush=True)
|
||||
print(f"[T] First 5 keys: {keys[:5]}", flush=True)
|
||||
|
||||
# Check dtype and shapes of first key
|
||||
first_tensor = f.get_tensor(keys[0])
|
||||
print(f"[T] First tensor: {keys[0]} shape={first_tensor.shape} dtype={first_tensor.dtype}", flush=True)
|
||||
|
||||
# Check total parameter count
|
||||
total_params = 0
|
||||
for k in keys:
|
||||
t = f.get_tensor(k)
|
||||
total_params += t.numel()
|
||||
print(f"[T] Total params: {total_params/1e9:.2f}B", flush=True)
|
||||
|
||||
dt = time.time() - t0
|
||||
print(f"[T] Loaded headers in {dt:.1f}s", flush=True)
|
||||
|
||||
# Now try loading CLIP with ComfyUI but force CPU
|
||||
print(f"\n[T] Loading CLIP through ComfyUI (on CPU)...", flush=True)
|
||||
import comfy.sd
|
||||
import comfy.model_management
|
||||
import folder_paths
|
||||
|
||||
# Monkey-patch to force CPU loading for CLIP
|
||||
_orig_get_torch_device = comfy.model_management.get_torch_device
|
||||
_orig_text_encoder_device = comfy.model_management.text_encoder_device
|
||||
_orig_text_encoder_offload = comfy.model_management.text_encoder_offload_device
|
||||
|
||||
# Force text encoder to CPU
|
||||
comfy.model_management.text_encoder_device = lambda: torch.device("cpu")
|
||||
comfy.model_management.text_encoder_offload_device = lambda: torch.device("cpu")
|
||||
|
||||
t1 = time.time()
|
||||
try:
|
||||
clip = comfy.sd.load_clip(
|
||||
ckpt_paths=[clip_path],
|
||||
embedding_directory=None,
|
||||
clip_type=comfy.sd.CLIPType.LUMINA2,
|
||||
)
|
||||
dt = time.time() - t1
|
||||
print(f"[T] CLIP loaded in {dt:.1f}s", flush=True)
|
||||
|
||||
# Test encoding
|
||||
print(f"[T] Testing text encoding on CPU...", flush=True)
|
||||
t2 = time.time()
|
||||
tokens = clip.tokenize({"g": "a photo of a cat sitting on a windowsill"})
|
||||
print(f"[T] Tokenized in {time.time()-t2:.3f}s", flush=True)
|
||||
|
||||
t3 = time.time()
|
||||
output = clip.encode_from_tokens_scheduled(tokens)
|
||||
cond = output[0]
|
||||
dt = time.time() - t3
|
||||
print(f"[T] CLIP encoded in {dt:.1f}s", flush=True)
|
||||
print(f"[T] Output shape: {cond.shape}, dtype: {cond.dtype}", flush=True)
|
||||
print(f"\n[T] === CLIP ON CPU WORKS! ===", flush=True)
|
||||
|
||||
except Exception as e:
|
||||
print(f"[T] ERROR: {e}", flush=True)
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
# Restore
|
||||
comfy.model_management.text_encoder_device = _orig_text_encoder_device
|
||||
comfy.model_management.text_encoder_offload_device = _orig_text_encoder_offload
|
||||
|
||||
print(f"[T] Total: {time.time()-t0:.1f}s", flush=True)
|
||||
os._exit(0)
|
||||
Reference in New Issue
Block a user