4장: PyTorch TorchScript

PyTorch 모델의 프로덕션 배포

弘益人間 · 널리 인간을 이롭게 하라

4.1 TorchScript 소개

TorchScript는 PyTorch 코드에서 직렬화 가능하고 최적화 가능한 모델을 생성하는 PyTorch의 방법입니다. 연구(Python)와 프로덕션(C++) 간의 격차를 해소하여 Python 종속성 없이 환경에 배포할 수 있습니다. TorchScript는 JIT(Just-In-Time) 컴파일을 사용하여 추론을 위한 모델을 최적화합니다.

TorchScript의 핵심 철학은 Python의 동적 즉시 실행에서 프로덕션 환경의 정적 최적화 실행으로 전환하는 경로를 제공하는 것입니다. 이러한 전환은 성능, 안정성, 최소 종속성이 중요한 대규모 모델 배포에 매우 중요합니다.

TorchScript의 장점

4.2 Tracing vs Scripting

TorchScript는 PyTorch 모델을 변환하는 두 가지 방법을 제공합니다: 추적(tracing)과 스크립팅(scripting). 각 방법을 언제 사용할지 이해하는 것이 성공적인 모델 배포에 중요합니다.

Tracing (추적)

추적은 예제 입력으로 순방향 패스 중에 실행되는 연산을 기록합니다. 정적 계산 그래프를 가진 모델에 이상적입니다.

import torch

# 모델 정의
class SimpleModel(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = torch.nn.Linear(10, 5)
        self.relu = torch.nn.ReLU()

    def forward(self, x):
        return self.relu(self.fc(x))

model = SimpleModel()
example_input = torch.randn(1, 10)

# 모델 추적
traced_model = torch.jit.trace(model, example_input)

# 저장
traced_model.save('traced_model.pt')

# 로드 및 사용
loaded = torch.jit.load('traced_model.pt')
output = loaded(torch.randn(1, 10))

# 추적된 그래프 검사
print(traced_model.graph)
print(traced_model.code)

Scripting (스크립팅)

스크립팅은 Python 소스 코드를 직접 분석하여 제어 흐름과 동적 동작을 캡처합니다. 모델에 if 문, 루프 또는 기타 제어 구조가 포함된 경우 사용합니다.

class ConditionalModel(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = torch.nn.Linear(10, 5)

    def forward(self, x):
        # 보존해야 하는 제어 흐름
        if x.sum() > 0:
            return self.fc(x)
        else:
            return x[:, :5]

model = ConditionalModel()

# 모델 스크립팅 (제어 흐름 캡처)
scripted_model = torch.jit.script(model)

# 저장
scripted_model.save('scripted_model.pt')

# 제어 흐름이 보존되었는지 확인
print(scripted_model.code)

4.3 Tracing vs Scripting 선택 기준

모델의 특성에 따라 적절한 방법을 선택하세요:

Tracing을 사용해야 할 때:

Scripting을 사용해야 할 때:

하이브리드 접근법:

4.4 고급 TorchScript 기능

타입 어노테이션

타입 어노테이션은 스크립팅에 필수적이며, TorchScript가 코드의 의도를 이해하고 조기에 오류를 발견하는 데 도움이 됩니다.

import torch
from typing import List, Tuple, Dict, Optional

class AnnotatedModel(torch.nn.Module):
    def forward(
        self,
        x: torch.Tensor,
        hidden: Tuple[torch.Tensor, torch.Tensor]
    ) -> Dict[str, torch.Tensor]:
        h, c = hidden
        output = self.process(x, h)
        return {"output": output, "hidden": c}

    def process(self, x: torch.Tensor, h: torch.Tensor) -> torch.Tensor:
        return x + h

    def batch_process(
        self,
        inputs: List[torch.Tensor],
        mask: Optional[torch.Tensor] = None
    ) -> torch.Tensor:
        """선택적 마스킹으로 배치 처리"""
        result = torch.stack(inputs)
        if mask is not None:
            result = result * mask
        return result

사용자 정의 연산자

import torch

@torch.jit.script
def custom_activation(x: torch.Tensor, threshold: float) -> torch.Tensor:
    """사용자 정의 게이트 활성화 함수"""
    return torch.where(x > threshold, x, torch.zeros_like(x))

@torch.jit.script
def swish(x: torch.Tensor, beta: float = 1.0) -> torch.Tensor:
    """Swish 활성화: x * sigmoid(beta * x)"""
    return x * torch.sigmoid(beta * x)

class ModelWithCustomOp(torch.nn.Module):
    def forward(self, x):
        x = custom_activation(x, 0.5)
        x = swish(x, beta=1.5)
        return x

model = ModelWithCustomOp()
scripted = torch.jit.script(model)

4.5 TorchScript 모델 로드 및 사용

Python에서

import torch
import numpy as np

# 모델 로드
model = torch.jit.load('model.pt')
model.eval()

# 추론 실행
with torch.no_grad():
    output = model(input_tensor)

# 그래프 검사
print("그래프 구조:")
print(model.graph)

print("\n생성된 코드:")
print(model.code)

# 모델 파라미터 확인
for name, param in model.named_parameters():
    print(f"{name}: {param.shape}")

# 추론 벤치마크
import time
start = time.time()
for _ in range(100):
    with torch.no_grad():
        _ = model(input_tensor)
elapsed = (time.time() - start) / 100
print(f"평균 추론 시간: {elapsed*1000:.2f}ms")

C++에서

#include <torch/script.h>
#include <iostream>
#include <memory>
#include <chrono>

int main() {
    // 모델 로드
    torch::jit::script::Module module;
    try {
        module = torch::jit::load("model.pt");
        module.eval();
    } catch (const c10::Error& e) {
        std::cerr << "모델 로드 오류: " << e.what() << "\n";
        return -1;
    }

    // 입력 생성
    std::vector<torch::jit::IValue> inputs;
    inputs.push_back(torch::randn({1, 3, 224, 224}));

    // 타이밍과 함께 모델 실행
    auto start = std::chrono::high_resolution_clock::now();
    at::Tensor output = module.forward(inputs).toTensor();
    auto end = std::chrono::high_resolution_clock::now();

    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "추론 시간: " << duration.count() << "ms\n";
    std::cout << "출력 형상: " << output.sizes() << '\n';
    std::cout << "출력 (처음 5개): " << output.slice(1, 0, 5) << '\n';

    return 0;
}

// 컴파일:
// g++ -std=c++17 inference.cpp -o inference \
//     -I${TORCH_PATH}/include \
//     -L${TORCH_PATH}/lib \
//     -ltorch -ltorch_cpu -lc10

4.6 최적화 기법

그래프 최적화

import torch

model = torch.jit.load('model.pt')

# 추론을 위한 최적화
optimized_model = torch.jit.optimize_for_inference(model)

# 모델 동결 (상수 인라인화, 훈련 전용 연산 제거)
frozen_model = torch.jit.freeze(optimized_model)

# 추가 최적화
# 1. 드롭아웃 레이어 제거
frozen_model.eval()

# 2. 연산 융합
# Conv + BatchNorm + ReLU가 자동으로 융합됨

# 최적화된 버전 저장
frozen_model.save('optimized_model.pt')

# 모델 크기 비교
import os
original_size = os.path.getsize('model.pt') / (1024 * 1024)
optimized_size = os.path.getsize('optimized_model.pt') / (1024 * 1024)
print(f"원본: {original_size:.2f}MB")
print(f"최적화: {optimized_size:.2f}MB")
print(f"감소율: {(1 - optimized_size/original_size)*100:.1f}%")

연산자 융합

PyTorch는 메모리 대역폭을 줄이고 성능을 향상시키기 위해 일반적인 연산자 패턴을 자동으로 융합합니다.

# PyTorch는 자동으로 연산 융합
# Conv + BatchNorm + ReLU → 융합 연산

model = torch.nn.Sequential(
    torch.nn.Conv2d(3, 64, 3),
    torch.nn.BatchNorm2d(64),
    torch.nn.ReLU()
)

traced = torch.jit.trace(model, torch.randn(1, 3, 224, 224))
# 추적 중 자동으로 융합 발생

# 일반적인 융합 패턴:
# 1. Conv + BN + ReLU
# 2. Linear + ReLU
# 3. Add + ReLU
# 4. Mul + Add (fused multiply-add)

# 융합된 그래프 보기
print(traced.graph)

4.7 모바일 배포

PyTorch Mobile

import torch
from torch.utils.mobile_optimizer import optimize_for_mobile

model = torch.jit.load('model.pt')
model.eval()

# 모바일 최적화
mobile_model = optimize_for_mobile(model)

# 라이트 인터프리터용 저장 (더 작은 런타임)
mobile_model._save_for_lite_interpreter('mobile_model.ptl')

# 모바일 모델 검증
loaded_mobile = torch.jit.load('mobile_model.ptl')
test_input = torch.randn(1, 3, 224, 224)
output = loaded_mobile(test_input)
print(f"모바일 모델 출력 형상: {output.shape}")

# Android에서 (Java):
"""
import org.pytorch.LiteModuleLoader;
import org.pytorch.Module;
import org.pytorch.Tensor;

Module module = LiteModuleLoader.load("mobile_model.ptl");
Tensor input = Tensor.fromBlob(inputArray, shape);
Tensor output = module.forward(IValue.from(input)).toTensor();
float[] scores = output.getDataAsFloatArray();
"""

# iOS에서 (Swift):
"""
import LibTorch

guard let module = try? LiteModuleLoader.load(modelPath: "mobile_model.ptl") else {
    fatalError("모델 로드 실패")
}
let input = try! Tensor(shape: [1, 3, 224, 224])
let output = try! module.forward([input])
"""

4.8 양자화

양자화는 가중치와 활성화를 부동소수점에서 정수로 변환하여 모델 크기를 줄이고 추론 속도를 향상시킵니다.

import torch

# 후처리 정적 양자화
model.eval()

# 1단계: 모듈 융합
model_fused = torch.ao.quantization.fuse_modules(
    model,
    [['conv', 'bn', 'relu']]
)

# 2단계: 양자화 구성 지정
model_fused.qconfig = torch.ao.quantization.get_default_qconfig('x86')

# 모바일 배포의 경우:
# model_fused.qconfig = torch.ao.quantization.get_default_qconfig('qnnpack')

# 3단계: 양자화 준비
model_prepared = torch.ao.quantization.prepare(model_fused)

# 4단계: 샘플 데이터로 보정
with torch.no_grad():
    for data, _ in calibration_loader:
        model_prepared(data)

# 5단계: 양자화된 모델로 변환
quantized_model = torch.ao.quantization.convert(model_prepared)

# 양자화된 모델 저장
torch.jit.save(torch.jit.script(quantized_model), 'quantized.pt')

# 크기 및 성능 비교
original_size = sum(p.numel() * p.element_size() for p in model.parameters())
quantized_size = sum(p.numel() * p.element_size() for p in quantized_model.parameters())
print(f"크기 감소: {original_size / quantized_size:.1f}배")

# 벤치마크
import time
inputs = torch.randn(10, 3, 224, 224)

start = time.time()
with torch.no_grad():
    _ = model(inputs)
fp32_time = time.time() - start

start = time.time()
with torch.no_grad():
    _ = quantized_model(inputs)
int8_time = time.time() - start

print(f"속도 향상: {fp32_time / int8_time:.1f}배")

4.9 모범 사례

동적 형상 처리

class DynamicModel(torch.nn.Module):
    def forward(self, x: torch.Tensor) -> torch.Tensor:
        batch_size = x.size(0)
        seq_len = x.size(1)
        # 동적 차원을 적절하게 사용
        return self.process(x, batch_size, seq_len)

    def process(self, x: torch.Tensor, bs: int, seq: int) -> torch.Tensor:
        # 하드코딩된 형상 피하기
        output = torch.zeros(bs, seq, 512, device=x.device)
        return output + x

# 다양한 입력 크기로 추적하여 검증
traced = torch.jit.trace(model, torch.randn(1, 10, 512))

# 다양한 배치 크기로 테스트
assert traced(torch.randn(4, 20, 512)).shape[0] == 4
assert traced(torch.randn(8, 15, 512)).shape[0] == 8

# 진정한 동적 동작을 위해 torch.jit.script 사용
scripted = torch.jit.script(model)

오류 처리

try:
    model = torch.jit.script(MyModel())
    print("스크립팅 성공!")
except RuntimeError as e:
    print(f"스크립팅 실패: {e}")
    print("대신 추적 시도 중...")
    try:
        example_input = torch.randn(1, 3, 224, 224)
        model = torch.jit.trace(MyModel(), example_input)
        print("추적 성공!")
    except Exception as e:
        print(f"스크립팅과 추적 모두 실패: {e}")
        # 모델 코드 수정 또는 즉시 모드 사용 고려

# 변환된 모델 검증
def validate_model(original, converted, test_inputs):
    """변환된 모델이 원본과 일치하는지 검증"""
    original.eval()
    converted.eval()

    with torch.no_grad():
        for inp in test_inputs:
            orig_out = original(inp)
            conv_out = converted(inp)
            diff = torch.abs(orig_out - conv_out)
            max_diff = torch.max(diff).item()
            print(f"최대 차이: {max_diff:.2e}")
            assert max_diff < 1e-5, f"출력이 너무 다름: {max_diff}"

test_inputs = [torch.randn(1, 3, 224, 224) for _ in range(5)]
validate_model(original_model, traced_model, test_inputs)

4.10 TorchScript 모델 디버깅

TorchScript 모델 디버깅에는 표준 Python 디버깅과 다른 기술이 필요합니다.

생성된 코드 검사

import torch

# 스크립팅된 모델 로드 또는 생성
model = torch.jit.script(MyModel())

# 생성된 TorchScript 코드 보기
print(model.code)

# 계산 그래프 보기
print(model.graph)

# 상세한 그래프 표현 가져오기
for node in model.graph.nodes():
    print(f"노드: {node.kind()}")
    print(f"  입력: {[i.debugName() for i in node.inputs()]}")
    print(f"  출력: {[o.debugName() for o in node.outputs()]}")

# 특정 연산 찾기
def find_operations(graph, op_name):
    """특정 연산 유형의 모든 노드 찾기"""
    return [node for node in graph.nodes() if node.kind() == op_name]

conv_ops = find_operations(model.graph, 'aten::conv2d')
print(f"발견된 컨볼루션 연산: {len(conv_ops)}개")

성능 프로파일링

import torch
from torch.profiler import profile, ProfilerActivity

model = torch.jit.load('model.pt')
input_data = torch.randn(1, 3, 224, 224)

# PyTorch 프로파일러로 프로파일링
with profile(
    activities=[ProfilerActivity.CPU],
    record_shapes=True,
    profile_memory=True
) as prof:
    with torch.no_grad():
        model(input_data)

# 프로파일링 결과 출력
print(prof.key_averages().table(sort_by="cpu_time_total", row_limit=10))

# Chrome 추적 내보내기 (시각화용)
prof.export_chrome_trace("trace.json")
# chrome://tracing에서 trace.json 열기

실전 배포 팁

import torch

# 1. 배치 크기별 성능 측정
def benchmark_batch_sizes(model, input_shape, batch_sizes=[1, 4, 8, 16]):
    """다양한 배치 크기로 모델 벤치마크"""
    results = {}
    for bs in batch_sizes:
        input_data = torch.randn(bs, *input_shape[1:])

        # 웜업
        for _ in range(10):
            with torch.no_grad():
                _ = model(input_data)

        # 측정
        import time
        start = time.time()
        for _ in range(100):
            with torch.no_grad():
                _ = model(input_data)
        elapsed = (time.time() - start) / 100

        results[bs] = {
            'latency_ms': elapsed * 1000,
            'throughput': bs / elapsed
        }

    return results

# 2. 메모리 사용량 프로파일링
def profile_memory(model, input_tensor):
    """모델 메모리 사용량 측정"""
    import torch.cuda as cuda

    if cuda.is_available():
        cuda.reset_peak_memory_stats()
        with torch.no_grad():
            _ = model(input_tensor.cuda())
        peak_memory = cuda.max_memory_allocated() / (1024 ** 2)  # MB
        print(f"피크 메모리 사용량: {peak_memory:.2f}MB")
    else:
        print("CUDA를 사용할 수 없습니다")

# 3. 다중 스레드 추론 테스트
def test_multithreaded_inference(model, num_threads=4):
    """다중 스레드 환경에서 모델 테스트"""
    import concurrent.futures

    def inference_task(idx):
        input_data = torch.randn(1, 3, 224, 224)
        with torch.no_grad():
            output = model(input_data)
        return output.shape

    with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
        futures = [executor.submit(inference_task, i) for i in range(10)]
        results = [f.result() for f in futures]

    print(f"✓ {num_threads}개 스레드로 다중 스레드 추론 성공")

요약

복습 문제

  1. torch.jit.trace와 torch.jit.script의 차이점은 무엇인가요? 각각 언제 선택해야 하나요?
  2. 연산자 융합의 개념을 설명하세요. 일반적으로 함께 융합되는 연산의 예를 세 가지 이상 제시하세요.
  3. PyTorch 모델을 TorchScript로 변환하고 C++ 애플리케이션에 배포하는 코드를 작성하세요. 오류 처리를 포함하세요.
  4. torch.jit.optimize_for_inference가 제공하는 최적화는 무엇인가요? torch.jit.freeze와 어떻게 다른가요?
  5. TorchScript 모델의 완전한 양자화 프로세스를 설명하세요. 정확도와 성능 간의 트레이드오프는 무엇인가요?
  6. TorchScript에서 동적 입력 형상을 가진 모델을 어떻게 처리하나요? 제한 사항은 무엇인가요?
  7. 여러 입력 크기에서 원본 모델과 TorchScript 모델 간의 출력을 비교하는 검증 함수를 구현하세요.
  8. TorchScript에서 타입 어노테이션 사용의 이점은 무엇인가요? 복잡한 타입 시그니처의 예를 제시하세요.
  9. optimize_for_mobile을 사용한 모바일 배포 워크플로우를 설명하세요. 어떤 최적화가 적용되나요?
  10. 원본 PyTorch 모델과 다른 출력을 생성하는 TorchScript 모델을 어떻게 디버깅하나요?
  11. 추적된 모델과 스크립팅된 모델의 성능 특성을 비교하세요. 스크립팅된 모델이 더 느릴 수 있는 경우는?
  12. torch.profiler를 사용하여 TorchScript 모델을 프로파일링하고 성능 병목 현상을 식별하는 코드를 작성하세요.
弘益人間 (홍익인간) · 널리 인간을 이롭게 하라

한국 통신 인프라 매핑 (제4장)

한국 통신 인프라 — 과기정통부(MSIT)·방송통신위원회(KCC)·정보통신기획평가원(IITP)·정보통신산업진흥원(NIPA)·KISA·NIS·KCMVP·TTA·KATS·KOLAS·NIA·ETRI·KAIST·KIST·POSTECH·삼성·LG·SK·KT·LG U+·NAVER·카카오 협력 「제5차 정보통신 전략 2024-2028」 운영. 「전기통신사업법」·「정보통신망법」·「전파법」·「방송법」·「개인정보 보호법」·「위치정보법」 적용. KS X 3GPP 4G LTE/5G NR/6G·KS X IETF 시리즈·KS X IEEE 802.11/802.15·KS X ITU-T G/H/Y 시리즈·KS X ISO/IEC 27000 시리즈 한국 프로파일 적용. 5G 가입자 3,500만 명 (2024)·6G 상용화 목표 2028년.

한국 디지털 전환·표준화 상세 매핑

한국의 디지털 전환과 표준화는 다음 협력 체계로 운영된다. 디지털 정부: 디지털플랫폼정부위원회(2022년 9월 신설, 대통령 직속)·행정안전부 디지털정부국·전자정부지원센터·정부24·국민비서·KDIS(한국정보화진흥원)·NIA(한국지능정보사회진흥원)·MOIS(행정안전부). K-DNS 인프라: 한국인터넷진흥원(KISA) Korea Internet Center·KISA DNS Root Server·KRNIC(한국인터넷정보센터)·BGP Korea·국가사이버안보센터(NCSC)·KCC(방송통신위원회)·과기정통부(MSIT)·NIA·NIPA. 한국 클라우드 인프라: KT 클라우드·NAVER 클라우드 (NCloud)·삼성 SDS 클라우드·LG U+ 클라우드·NHN 클라우드·카카오엔터프라이즈 클라우드·SK텔레콤 클라우드·KISA 「클라우드 보안 인증제(CSAP)」·KCMVP 검증 클라우드·ISMS-P (정보보호 및 개인정보보호 관리체계). 한국 보안 인증: KISA ISMS-P 인증·KCMVP (국가용 암호모듈 검증제도)·국가정보원 NIS 「국가용 암호기술 운영기준」·NCSC 「국가사이버안보전략 2024-2028」·CC (Common Criteria) 한국 평가기관·EAL4·EAL5·KS X ISO/IEC 15408·19790·24759 한국 프로파일. 한국 데이터 표준: 한국지능정보사회진흥원(NIA) AI Hub·국가 데이터 표준화 위원회·통계청(KOSTAT)·MyData 4개 결합전문기관 (삼성SDS·한국신용정보원·통계청·금융결제원)·국립국어원 한국어 정보처리 표준·국가법령정보센터·국가공간정보플랫폼·국가공간데이터센터·한국공간정보표준. 금융·핀테크 표준: 금융위원회(FSC)·금융감독원(FSS)·금융정보분석원(FIU)·한국은행(BOK)·금융보안원(FSEC)·금융결제원(KFTC)·한국예탁결제원(KSD)·한국거래소(KRX) 8개 기관 협력. 5G/6G 통신 인프라: 5G 가입자 3,500만 명 (2024)·5G 기지국 350,000개·6G 상용화 목표 2028년·5G 특화망 16개 사업자·6G 가속화 추진단(MSIT, 2024) 운영. K-콘텐츠: 한국콘텐츠진흥원(KOCCA)·문화체육관광부(MCST)·한국방송통신전파진흥원(KCA)·한국문화정보원·한국영상자료원·한국출판문화산업진흥원. 「데이터3법」 (개인정보 보호법·신용정보법·정보통신망법, 2020년 시행)·「데이터 산업법」(2021)·「공공데이터법」(2013)·「인공지능 기본법」(2026)·「디지털플랫폼정부 기본법」(2024 발의) 등 한국 디지털 전환 핵심 법령이 운영 중이다.

한국 산업·연구·교육 인프라 종합 매핑

한국의 산업 생태계와 표준화 체계는 다음 핵심 인프라로 구성된다. 한국 5대 그룹: 삼성·현대자동차·LG·SK·롯데. 각 그룹별 표준화 위원회와 ISO/IEC TC 한국 간사 활동. 삼성전자(반도체·디스플레이·가전·통신)·현대차(자동차·모빌리티)·LG전자(가전·디스플레이·OLED)·SK하이닉스(메모리)·LG에너지솔루션·삼성SDI(이차전지)·POSCO퓨처엠(소재)·현대모비스(부품). 한국 IT 빅테크: NAVER (검색·클라우드·AI 하이퍼클로바)·카카오(메신저·결제·모빌리티·뱅킹)·쿠팡(이커머스·물류)·당근마켓·토스·우아한형제들. 한국 통신3사: SK텔레콤·KT·LG U+. 5G·5G 특화망·B2B 클라우드·AI 사업 운영. 한국 7대 거점 대학: 서울대·KAIST·POSTECH·연세대·고려대·UNIST·DGIST·GIST. 모두 표준화 R&D 거점이며 ISO/IEC/IEEE 한국 의장 활동 중. 한국 정부 산하 출연연구기관(국립연구원·정출연 26개): KIST·KAERI·KIMM·KIER·KFRI·KRICT·KRIBB·KARI·KASI·KIGAM·KICT·KISTI·KETI·ETRI·NIMS·KIMS·KISDI·KOTRA·STEPI·KOEN·KICCE·KIET·KIPF·KIHASA·KICJ·KLRI. 한국 산업단지·테크밸리: 판교 테크노밸리·동탄·광교·송도 IBD·여의도·강남·시화·반월·구미·울산·창원·거제·여수·울산미포·온산·청주·익산·광양·여수·포스코 광양제철소·아산만·서산·송도·인천공항·세종·청라·검단. 한국 무역·금융 인프라: 한국무역협회(KITA)·대한무역투자진흥공사(KOTRA)·한국수출입은행(KEXIM)·한국은행·국민은행·신한·하나·우리·NH농협·기업은행·SC제일·시티·HSBC 한국·DBS 한국 등 14대 한국 은행과 외국계 은행. 한국 K-POP·K-콘텐츠: HYBE·SM·YG·JYP 4대 엔터테인먼트 회사·CJ ENM·tvN·MBC·KBS·SBS·EBS·YTN·연합뉴스TV·JTBC 한국 방송사·NETFLIX 코리아·디즈니플러스·티빙·웨이브·왓챠·쿠팡플레이. 한국 게임 산업: 넥슨·엔씨소프트·크래프톤·넷마블·카카오게임즈·펄어비스·컴투스·게임빌·NHN·스마일게이트·웹젠. 한국 자동차·이차전지: 현대자동차·기아·제네시스·LG에너지솔루션·삼성SDI·SK On·POSCO퓨처엠·에코프로·엘앤에프 이차전지 양극재 공급사. 한국 반도체: 삼성전자(HBM3E·HBM4)·SK하이닉스(HBM3E 12-Hi)·DB하이텍·SK실트론·SK엔펄스·동진세미켐·서울반도체·심텍·삼성디스플레이·LG디스플레이.

한국 표준화 인프라 종합 매핑

한국의 산업·기술 표준화는 다음 협력 체계를 통해 운영된다. 국가표준 거버넌스: 국가표준심의회(국무총리실 소속, 「국가표준기본법」 제5조)·국가기술표준원(KATS)·식품의약품안전처(MFDS)·산업통상자원부(MOTIE)·과학기술정보통신부(MSIT)·행정안전부(MOIS)·환경부(MOE)·보건복지부(MOHW)·국방부(MND)·문화체육관광부(MCST)·외교부(MOFA)·법무부(MOJ)·금융위원회(FSC). 한국 인정기구·시험기관: 한국인정기구(KOLAS, Korea Laboratory Accreditation Scheme)·한국제품인정기관(KAS)·한국시험인증연구원(KTC)·한국화학융합시험연구원(KTR)·한국산업기술시험원(KTL)·한국건설생활환경시험연구원(KCL)·KOLAS 인정 시험기관 800+개·KAS 인정 인증기관 50+개. 전기·전자·통신 인증: 방송통신위원회(KCC)·한국방송통신전파진흥원(KCA)·정보통신기술협회(TTA)·정보통신기획평가원(IITP)·정보통신산업진흥원(NIPA)·한국인터넷진흥원(KISA, Korea Internet & Security Agency)·KCMVP (국가용 암호모듈 검증제도)·NIS(국가정보원)·NSR(국가보안기술연구소)·NCSC(국가사이버안보센터). 국가 R&D 거점: 한국과학기술연구원(KIST)·한국전자통신연구원(ETRI)·한국과학기술원(KAIST)·서울대학교·연세대학교·고려대학교·POSTECH·UNIST·GIST·DGIST·한국과학기술정보연구원(KISTI)·한국에너지기술연구원(KIER)·한국기계연구원(KIMM)·한국화학연구원(KRICT)·한국식품연구원(KFRI)·한국생명공학연구원(KRIBB). 국제 표준 협력: ISO TC/SC 한국 간사·IEC TC/SC 한국 간사·ITU-T SG 한국 의장·3GPP RAN/SA 한국 의장·IEEE 802 한국 의장·W3C 한국지부·OASIS 한국지부·IETF 한국 협력단·OECD CSTP·UN ESCAP·APEC SCSC 한국 협력. 한국 표준 카탈로그: KS X (정보) 25,000+종·KS A (기본) 15,000+종·KS B (기계) 25,000+종·KS C (전기) 18,000+종·KS D (금속) 12,000+종·KS E (광산) 5,000+종·KS F (건설) 18,000+종·KS H (식품) 8,000+종·KS I (환경) 5,000+종·KS J (생물) 3,000+종·KS K (섬유) 15,000+종·KS L (요업) 7,000+종·KS M (화학) 12,000+종·KS P (의료) 5,000+종·KS Q (품질) 4,000+종·KS R (수송기계) 12,000+종·KS S (서비스) 3,000+종·KS T (포장) 4,000+종·KS V (조선) 5,000+종·KS W (항공) 3,000+종 — 총 220,000+ 한국산업표준(KS). 「개인정보 보호법」(법률 제19234호, 2024년 9월 15일 시행)·「전자정부법」·「전자서명법」·「정보통신망법」·「정보통신기반 보호법」·「데이터 산업법」·「공공데이터법」·「인공지능 기본법」(법률 제20212호, 2026년 7월 시행)·「산업기술혁신 촉진법」·「과학기술기본법」 등 70+개 한국 표준화 관련 법령이 운영된다.