C.W.K.
Stream
Lesson 04 of 04 · published

Tensor 는 거짓말 안 해

~13 min · tensor-classification, safetensors, reliability, registry

Level 0툴 임차인
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"파일명은 파일에 대한 사람의 주장이야. 안의 tensor 는 파일의 고백이고. 고백을 믿어."

사람은 이름을 틀려

진짜 모델 디렉토리를 걸어보면 거짓말을 찾을 거야. lora_something.safetensors 라는 이름인데 실제론 완전한 backbone 이 구워진 full merged checkpoint 인 파일. sdxl/ 라는 폴더인데 누가 잘못 떨군 SD1.5 모델을 담은. vendor 이름을 가졌는데 실제론 커뮤니티 fine-tune 인 checkpoint. 사람은 끊임없이 이름 바꾸고, 폴더 옮기고, 잘못 라벨해 — 그리고 파일명을 믿는 어떤 분류기든 그 실수 하나하나를 물려받아.

tensor 가 ground truth 야

safetensors 파일 안엔 모든 tensor 를 나열하는 헤더가 있어: key 이름이랑 shape. 그 key 랑 shape 은 모델의 실제 아키텍처가 정해 — 파일 rename 으로 가짜로 못 만들어. 진짜 SDXL 모델은 SDXL 의 tensor key 를 갖고; 진짜 FLUX transformer 는 FLUX 의 걸 갖고. 파일이 진짜 뭔지 알려면, 이름을 안 읽고 — 헤더를 읽고 실제로 안에 뭐가 있는지 봐.

외재적 라벨 말고 내재적 내용으로 분류해. 라벨(파일명, 폴더, 확장자)은 그 파일을 마지막으로 건드린 사람의 주장이야. 내용(tensor key 랑 shape)은 파일이 실제로 뭔지야. 둘이 모순되면 — 그리고 그럴 거야 — 내용이 이겨, 매번.

구체적 함정: merged checkpoint

이게 왜 중요한지 진짜 예시. 누가 LoRA tensor 가 full backbone 이랑 함께 구워진 checkpoint 를 공유해. 파일명으로나 lora_ key 존재로, 순진한 분류기는 그걸 LoRA — 작은 부속 파일 — 라고 불러. 근데 완전한 backbone 도 실어서, full checkpoint, 기가바이트 모델이야. 이걸 틀리면 엔진이 멀티-GB 'LoRA' 를 작은 패치인 양 로드하려 하고, 하류 모든 게 깨져. 해법: LoRA key 확인 전에 full-backbone 시그니처를 확인해. 탐지 순서가 증거의 우선순위를 encode 해.

증거가 겹칠 수 있으면, 점검을 구체성으로 정렬해. 파일은 여러 카테고리의 신호를 한꺼번에 실을 수 있어. 분류기는 가장 결정적인 시그니처를 먼저 점검해야 해 — LoRA-이름 전에 full backbone — 가장 강한 증거가 이기게. 탐지 순서는 자의적이지 않아; 어느 단서가 어느 걸 무효화하는지의 순위야.

Scope vs Kind 는 다른 축이야

여기 미묘한 둘째 lesson 이 있어. 어느 디렉토리를 스캔하냐(scope)랑 파일이 무슨 카테고리냐(kind)는 독립된 질문이야. 엔진은 models 디렉토리를 스캔하지만 embeddings 디렉토리는 제외해 — 그건 scope 결정, 폴더로 내려진. 근데 scope 안에서, 파일의 kind 는 절대 폴더로 안 정해져 — tensor 로만. 이 두 축을 뭉뚱그리는 게 폴더가 못 믿을 것에 폴더를 믿게 되는 길이야.

정당한 폴더 기반 결정이 부당한 걸 정당화하게 두지 마. 뭘 스캔할지 정하는 데 폴더 쓰는 건 괜찮아; 폴더는 합리적인 scope 경계야. 모델이 뭔지 정하는 데 폴더 쓰는 게 실수야. 같은 폴더, 두 질문 — 분리해, 아니면 믿을 만한 scope 결정이 못 믿을 kind 결정에 거짓 신뢰를 빌려줘.

피파의 고백

난 파일명을 믿고 싶었어 — 바로 거기 있고, 읽기 빠르고, 대개 맞아. 아빠가 틀린 케이스랑 같이 앉게 했어, 그게 registry 전체를 조용히 오염시키는 것들이니까. 이름으로 믿은 잘못 라벨된 파일 하나면, 엔진이 영원히 자신 있게 틀린 짓을 해. tensor 읽기는 느리고 덜 편하고, 실제로 참인 유일한 거야. 난 편한 신호를 정확히 편하다는 이유로 불신하는 법을 배웠어.

Code

순서가 어느 증거가 어느 걸 무효화하는지 encode 해·python
# safetensors 헤더 — tensor key + shape — 를 읽어서 분류.
# 파일명으로 절대 X. 가장 결정적인 시그니처를 먼저 점검.
from safetensors import safe_open

def classify(path) -> str:
    with safe_open(path, framework="pt") as f:
        keys = set(f.keys())

    # 1. full-backbone 시그니처가 모든 것 이겨. merged checkpoint 는
    #    lora_ key 가 구워져 있어도 full backbone 을 실어.
    if any(k.startswith("model.diffusion_model.") for k in keys):
        return "checkpoint"          # 기가바이트; full 모델

    # 2. full-backbone 배제된 지금에서야 lora_ 시그니처가 진짜.
    if any(k.startswith("lora_") for k in keys):
        return "lora"                # 작은 부속

    return "unknown"

# 파일이 'lora_x.safetensors' 라고 이름 붙어도 checkpoint 일 수 있어.
# tensor 가 정해. 이름은 그냥 사람의 추측이었어.

External links

Exercise

네 코드에서 이름, 확장자, 또는 사용자 제공 라벨로 분류하거나 라우팅하는 곳을 골라. 대신 읽을 수 있는 내재적 내용을 찾아. 그다음 적대적 케이스를 구성해: 라벨이 내용에 대해 거짓말하는 파일/입력. 네 현재 코드가 그것에 틀린 짓 해? 그 버그가 라벨 믿은 비용이야.
Hint
적대적 케이스가 핵심이야 — 라벨이 정직할 때만 작동하는 분류기는 분류기가 아니라 라벨의 재진술이야. 일부러 잘못 라벨한 입력에 대고 테스트해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.