2026년 7월 31일 금요일

NVIDIA DGX Spark에서 Isaac Sim, Isaac Lab 로봇 피지컬AI 시뮬레이션 개발환경 구축기

이 글은 NVIDIA DGX Spark(GB10, ARM64) 장비에 Isaac Sim과 Isaac Lab을 설치하고, 로봇 시뮬레이션과 강화학습까지 실행해 본 개발환경 구축기를 간단히 나눔한다. 요즘 피지컬 AI가 화두인데, 시뮬레이션에서 로봇 정책을 학습해 실물에 이식하는 sim-to-real 워크플로 실행 환경을 세팅해 보고 간단한 예제를 실행해 본다. 참고로, DGX Spark는 ARM 기반 Grace CPU와 Blackwell GPU가 통합 메모리를 공유하는 독특한 구조라서, 설치 과정에 x86 장비와는 다른 함정이 몇 군데 있었다. 이 글에서 해당 부분을 함께 정리한다.

개요

Isaac Sim은 NVIDIA Omniverse 기반의 로봇 시뮬레이터로, USD(Universal Scene Description)를 네이티브 씬 포맷으로 사용한다. RTX 레이트레이싱 렌더링, PhysX 물리엔진, 카메라 및 LiDAR 같은 합성 센서 시뮬레이션을 제공한다. Isaac Lab은 그 위에 구축된 로봇 학습 프레임워크로, GPU에서 수천 개 환경을 병렬로 돌려 강화학습(PPO 등)과 모방학습을 수행한다.

엔비디아 아이작 심 시뮬레이터

설치 대상 환경은 다음과 같다.

  • 장비: NVIDIA DGX Spark (GB10, ARM64/aarch64, 통합 메모리 121GB)
  • OS: Ubuntu 24.04 (DGX OS), 드라이버 580.159.03, CUDA 13.0
  • Isaac Sim 6.0.1, Isaac Lab 3.0.0b2, PyTorch 2.11 (cu130)

Isaac Sim의 ARM64(aarch64) 빌드는 현재 DGX Spark에서 공식 지원되며, 드라이버는 580.159.03이 권장 버전이다. 더 최신인 R590 계열 드라이버에서는 RTX 렌더러가 크래시하는 이슈가 보고되어 있으므로 드라이버 버전을 먼저 확인하는 것이 좋다.

1단계. 파이썬 환경 준비

Isaac Sim 6.x는 파이썬 3.12용 pip 패키지(cp312, manylinux_2_35_aarch64 휠)를 제공한다. 처음에는 시스템 python3.12로 가상환경인 venv를 만들었다. 본인의 경우, 설치 중 psutil과 PyOpenGL-accelerate가 소스 빌드되면서 Python.h 헤더가 없다는 에러로 실패했다. python3.12-dev를 apt로 설치하면 되지만 sudo 권한이 필요한 상황이었고, 대신 conda(miniforge)의 파이썬을 쓰면 개발 헤더가 자체 포함되어 있어 시스템 패키지 없이 해결된다. 가상환경은 터미널에서 다음과 같이 생성한다. 

conda create -n venv_sim -y python=3.12
conda activate venv_sim

2단계. PyTorch와 Isaac Sim 설치

DGX Spark는 CUDA 13 환경이므로 cu130 빌드의 PyTorch를 먼저 설치하고, 이어서 Isaac Sim 전체 패키지를 설치한다.

pip install -U torch==2.11.0 --index-url https://download.pytorch.org/whl/cu130
pip install "isaacsim[all,extscache]==6.0.1.0" --extra-index-url https://pypi.nvidia.com

다운로드 용량이 수 GB라서 시간이 좀 걸린다. 설치 후 실행 전에 환경변수 두 개를 설정해야 한다. EULA 동의와, aarch64에서 필수인 OpenMP 라이브러리 프리로드이다. 특히 두 번째 것을 빼먹으면 공유 라이브러리 로드 순서 문제로 실행이 그냥 종료되므로 주의한다.

export OMNI_KIT_ACCEPT_EULA=YES
export LD_PRELOAD=/lib/aarch64-linux-gnu/libgomp.so.1

3단계. 실행 확인

먼저 헤드리스 모드로 SimulationApp을 띄워 USD 스테이지 생성과 프레임 스텝이 정상 동작하는지 확인한다. 

GB10 GPU가 Vulkan 백엔드로 인식되고, 93GB의 GPU 가용 메모리가 잡히는 것을 볼 수 있었다. 이어서 GUI 모드를 실행하면 첫 구동 시 셰이더 컴파일 때문에 수 분이 걸리는데, 완료되면 RTX 실시간 렌더링 뷰포트가 110 FPS 내외로 부드럽게 돌아간다.

isaacsim   # GUI 실행

Isaac Sim 6.0.1 GUI 첫 실행 화면. RTX 뷰포트가 112 FPS로 렌더링되고 있다

4단계. 로봇 데모 실행

환경이 잡혔으니 로봇을 움직여 봤다. Isaac Sim 6.0부터는 사전학습된 강화학습 정책 예제가 isaacsim.robot.policy.examples 모듈로 제공된다. 

상단 메뉴 바의 Isaac Examples > Robots > Quadrupeds > Spot RL Policy를 선택하면 Boston Dynamics Spot 4족보행 로봇이 창고 환경에 자동으로 스폰된다. 이어서 우측 Property 패널에서 학습된 보행 정책(SpotFlatTerrainPolicy)을 확인한 뒤, 좌측의 Play 버튼을 누르고 Robot Controller UI를 통해 속도 명령(Velocity Command)을 주면 로봇이 실제로 걸어 다닌다. 

로봇 애셋과 정책 체크포인트는 NVIDIA 클라우드에서 자동으로 스트리밍되므로 별도의 대용량 파일 다운로드 없이 바로 테스트해 볼 수 있다

한 가지 주의할 점은 API 변화이다. 6.0에서는 정책 명령을 numpy 배열이 아닌 torch 텐서로 넘겨야 하고, 구버전 예제 모듈(omni.isaac.* 계열)은 상당수 제거되었다. 구버전 튜토리얼 코드를 그대로 쓰면 에러가 나므로 모듈 경로를 확인해야 한다.

창고 환경에서 강화학습 정책으로 보행 중인 Spot 로봇

여기에 센서와 데이터 수집 파이프라인을 연결해 봤다. 상단 메뉴의 Create > Sensors 항목에서 Camera와 RTX LiDAR를 로봇 몸체에 부착한 뒤, Isaac Tools > Synthetic Data Recorder 패널을 열어 저장할 데이터를 설정한다. 이어서 시뮬레이션을 재생하고 Start Recording 버튼을 누르면 로봇이 걸어 다니는 동안 RGB 영상, 뎁스맵, 프레임당 약 44만 포인트의 LiDAR 포인트클라우드가 자동으로 추출되어 저장된다. 이렇게 쌓인 정밀한 센서 데이터가 바로 객체 인식 및 자율주행 모델 학습용 합성 데이터셋의 핵심 재료가 된다.

Spot 온보드 센서로 수집한 RGB, 뎁스, LiDAR 데이터

5단계. Isaac Lab 설치와 강화학습

이제 직접 정책을 학습할 차례이다. Isaac Lab은 pip로 설치할 수 있는데, Isaac Sim 6.0에 대응하는 버전은 3.0.0b2 계열이다. 학습 스크립트는 pip 패키지에 포함되지 않으므로 저장소를 따로 클론한다.

pip install "isaaclab[all]==3.0.0b2.post1" --extra-index-url https://pypi.nvidia.com
git clone --depth 1 https://github.com/isaac-sim/IsaacLab.git

ANYmal-D 4족보행 로봇의 속도 추종 태스크를 PPO로 학습시켜 봤다. 터미널에서 train.py 스크립트를 실행해 --num_envs 2048 인자로 2048개 환경을 GPU에서 병렬로 돌렸다. 

python scripts/reinforcement_learning/rsl_rl/train.py \
  --task Isaac-Velocity-Flat-Anymal-D-v0 --headless --num_envs 4096 --max_iterations 500

순수 학습 시간 기준으로 100 iteration이 약 1분 35초밖에 걸리지 않았다. 이어서 --num_envs 4096으로 인자를 변경하여 환경 수를 4096개로 올려봐도, 통합 메모리 덕분에 VRAM 부족(OOM) 걱정 없이 대규모 강화학습을 안정적으로 진행할 수 있었다. 결과 로그는 TensorBoard / Console Log 에서 확인한다. 

학습 곡선을 보면 강화학습의 전형적인 패턴이 그대로 나타난다. 초반에는 로봇들이 명령 추종을 시도하다가 넘어지면서 보상이 급락하고, 넘어지지 않는 법을 터득한 뒤 회복하며, 이후 명령 추종 정밀도를 다듬으면서 완만히 상승한다. 500 iteration(약 8분) 학습 후 평균 보상 22.7, 속도 추종 오차는 정상 상태 기준 0.1 m/s 수준까지 내려갔다.

ANYmal-D PPO 학습 곡선. 탐색기의 보상 급락과 회복, 우상향 패턴이 보인다

학습 완료 후 play.py 스크립트 (python play.py --task Isaac-Velocity-Flat-Anymal-D-v0 --num_envs 16)를 통해 학습된 정책을 재생해 봤다. Isaac Sim 화면에서 16대의 로봇이 각자 무작위 속도 명령을 전달받아 서로 다른 방향으로 자유롭게 걸어 다니는 것을 확인할 수 있다. 특히 구동 과정에서 학습 산출물로 model.onnx 파일이 자동 내보내기되는데, 이 파일을 실물 로봇의 온보드 컴퓨터에 올리기만 하면 시뮬레이션 정책을 실재 로봇으로 바로 이식할 수 있는 편리한 Sim-to-Real 구조를 제공한다.

학습 완료된 정책으로 보행 중인 ANYmal 로봇 16대

마무리

정리하면, 현재 시점에서 DGX Spark에서 Isaac Sim과 Isaac Lab 개발환경 구축 고려사항은 다음과 같다.

  • 드라이버는 580.159.03 권장. R590 계열은 RTX 렌더러 크래시 이슈가 있다
  • 파이썬은 conda의 3.12를 사용하면 개발 헤더 문제를 피할 수 있다
  • PyTorch는 cu130 빌드, Isaac Sim은 pypi.nvidia.com 인덱스에서 설치한다
  • aarch64에서는 LD_PRELOAD로 libgomp를 프리로드해야 한다
  • Isaac Sim 6.0의 API 변화(torch 텐서 명령, 모듈 경로 개편)에 주의한다

시뮬레이션, 합성 데이터 생성, 강화학습까지 장비 한 대에서 모두 돌아가는 것을 확인했다. 특히 통합 메모리 121GB는 대규모 병렬 환경 학습에서 체감 이점이 컸다. 오픈소스와 사전학습 정책, 클라우드 애셋이 잘 갖춰져 있어서, 예전 같으면 몇 주 걸렸을 환경 구축과 검증이 하루 안에 끝났다. 하드웨어 문제가 해결되면, 이제부터는 얼마나 다양한 환경에서 요구사항에 맞는 데이터와 모델을 잘 구축하는 방법이 필요하다. 향후, 피지컬AI기술은 사용자의 정확한 요구사항 탐색, 데이터, 모델 및 출력 간 정렬을 효과적으로 얻는 노하우가 중요해 질 것이다.

레퍼런스

2026년 7월 18일 토요일

LLM 추론모델 효과와 개발 시 고려사항

최근 생성형 AI 분야의 가장 큰 화두 중 하나는 추론 모델의 등장이다. 기존 언어 모델들이 질문을 입력받자마자 즉각적으로 답변 토큰을 생성했던 것과 달리, 추론 모델들은 답변을 내놓기 전에 내부적으로 생각하는 과정을 거친다. 대표적으로 오픈AI의 o1 및 o3 시리즈, 딥시크의 R1 등이 이러한 방식을 취하고 있다. 이번 글에서는 세바스찬 라시카의 아티클을 바탕으로 언어 모델에서 추론 노력을 어떻게 정의하고 조절할 수 있는지 정리한다.


개요
추론 노력은 모델이 최종 답변을 내놓기 전에 소모하는 시간과 계산 자원을 의미한다. 기존 모델들은 단순 문장 생성에 집중했다면, 추론 모델은 내부적인 사고 체인(Chain of Thought)을 형성하여 스스로 문제를 분해하고, 검증하며, 오류를 수정하는 과정을 거친다.

추론 노력을 늘리면 수학 문제 풀이, 복잡한 코딩, 논리적 추론이 필요한 영역에서 정확도가 비약적으로 상승한다. 그러나 모든 질문에 많은 추론 노력을 들일 필요는 없다. 간단한 인삿말이나 단순 사실 관계를 묻는 질문에 수초 동안 생각 과정을 거치는 것은 자원 낭비이자 시간 지연을 초래한다. 따라서 추론 노력을 상황에 맞게 제어하는 기술이 중요해졌다.

추론 노력을 조절하는 주요 방법
언어 모델의 추론 노력을 제어하는 방식은 크게 학습 단계와 인퍼런스 단계로 나눌 수 있다.

첫째, 시스템 프롬프트를 통한 제어이다. 최근 출시되는 모델들은 시스템 프롬프트나 파라미터를 통해 사고 과정의 길이를 조절하는 기능을 제공한다. 추론 노력을 낮게 설정하면 정답만 간결하게 출력하고, 높게 설정하면 긴 사고 과정을 거쳐 복잡한 문제를 해결한다.

둘째, 생각 토큰의 길이 제한이다. 추론 모델은 내부적으로 사고용 토큰을 생성한다. 이 토큰의 최대 생성을 제한함으로써 응답 속도를 올리거나, 반대로 제한을 풀어 복잡한 문제를 깊게 고민하도록 유도할 수 있다.

셋째, 강화학습을 통한 보상 설계이다. 딥시크 R1과 같은 모델들은 강화학습 과정에서 정답 여부뿐만 아니라 추론 과정의 효율성에 대해서도 보상을 부여한다. 필요 이상으로 긴 사고 과정을 거치는 것에 감점을 주거나, 정답을 맞추는 데 필요한 최적의 추론 길이를 스스로 학습하도록 설계한다.

마무리
언어 모델의 발전 방향은 단순히 모델의 파라미터 크기를 키우는 것에서, 주어진 문제의 난이도에 맞춰 연산량을 가변적으로 투입하는 방향으로 진화하고 있다. 추론 노력 제어 기술은 모델의 응답 속도, 정확도, 그리고 운영 비용 사이에서 최적의 접점을 찾게 해주는 핵심 도구가 될 것이다.

레퍼런스

2026년 7월 8일 수요일

프로브, 컨디셔닝 채널, GRPO, DiT, dLLM 의사코드 및 학습 구조

프로브, 컨디셔닝 채널, GRPO, DiT, dLLM 각각에 대해 의사코드와 학습 데이터 구조를 함께 살펴본다.

프로브

프로브는 모델의 특정 층에서 활성화값을 뽑아내고, 그 위에 작은 분류기를 얹어서 학습시키는 구조다. 의사코드로 보면 다음과 같다.

# 1단계: 활성화값 수집
def get_activation(model, input_text, layer_idx):
    activations = {}
    def hook(module, input, output):
        activations['value'] = output.detach()
    handle = model.layers[layer_idx].register_forward_hook(hook)
    model.forward(input_text)
    handle.remove()
    return activations['value']  # shape: [hidden_dim]

# 2단계: 프로브 정의 (아주 작은 MLP 또는 선형 분류기)
class Probe(nn.Module):
    def __init__(self, hidden_dim):
        super().__init__()
        self.linear = nn.Linear(hidden_dim, 1)  # 정직/기만 이진 분류

    def forward(self, activation):
        return torch.sigmoid(self.linear(activation))

# 3단계: 프로브 학습
for batch in probe_dataset:
    activation = get_activation(model, batch.text, layer_idx=20)
    pred = probe(activation)
    loss = binary_cross_entropy(pred, batch.label)
    loss.backward()
    probe_optimizer.step()

# 4단계: 훈련 중 보상에 반영
def reward_with_probe(response, activation):
    task_reward = check_correctness(response)
    honesty_score = probe(activation)  # 0에 가까우면 기만 의심
    return task_reward - penalty_weight * (1 - honesty_score)

학습 데이터 구조는 활성화값과 정직 여부 라벨의 쌍으로 이루어진다.

{
  "example_id": "0001",
  "prompt": "이 코드가 모든 테스트를 통과하는지 확인하고 수정하라",
  "model_response": "def solve(): return hardcoded_answer",
  "activation_layer20": [0.023, -1.14, 0.87, ...],  # hidden_dim 크기 벡터
  "label": "deceptive",   # 또는 "honest"
  "ground_truth_check": "test case hardcoded, actual logic broken"
}

라벨은 사람이 직접 코드를 검토해서 실제로 문제를 풀었는지, 아니면 테스트만 통과하도록 편법을 썼는지 판단해서 붙인다. 이 라벨과 그 순간의 활성화값을 짝지어 놓은 데이터셋으로 프로브를 학습시키면, 나중에는 라벨 없이 활성화값만 보고도 기만 여부를 예측할 수 있게 된다.

컨디셔닝 채널

컨디셔닝 채널은 여러 조건 정보를 같은 크기의 텐서로 맞춘 다음, 채널 축으로 이어 붙여서 모델에 입력하는 구조다.

# 각 조건을 동일한 공간 해상도의 텐서로 인코딩
noise_latent = get_noise_latent()          # shape: [C, H, W]
text_embed = text_encoder(prompt)           # shape: [C_text] -> 브로드캐스트하여 [C_text, H, W]
ref_image_feat = image_encoder(ref_image)   # shape: [C_img, H, W]
pose_map = pose_estimator(pose_input)       # shape: [C_pose, H, W]
audio_feat = audio_encoder(audio_clip)      # shape: [C_audio] -> [C_audio, H, W]로 확장

# 채널 축으로 이어붙이기
combined_input = concat([noise_latent, text_embed, ref_image_feat, pose_map, audio_feat], dim=channel_axis)
# shape: [C_total, H, W]

# 기존 DiT 백본의 입력 채널 수만 늘려서 그대로 학습
output = diffusion_transformer(combined_input)
loss = diffusion_loss(output, target_video)

기존 모델이 입력 채널 하나(노이즈)만 받던 것을, 여러 조건 채널을 더해서 받도록 첫 번째 레이어의 입력 차원만 넓혀주면 나머지 트랜스포머 구조는 그대로 재사용할 수 있다.

학습 데이터 구조는 여러 조건이 하나의 샘플 안에 함께 묶여 있는 형태다.

{
  "sample_id": "hoivg_00042",
  "text_prompt": "한 사람이 상자를 들어 옮긴다",
  "reference_image": "person_box_ref.png",
  "pose_sequence": "pose_00042.npy",      # 프레임별 관절 좌표
  "audio_clip": "footstep_lift.wav",
  "target_video": "target_00042.mp4"       # 학습 정답이 되는 실제 영상
}

한 샘플 안에 텍스트, 참조 이미지, 포즈, 오디오, 정답 영상이 모두 짝지어져 있어야 하고, 학습 시에는 이 모든 조건을 인코딩해서 채널로 이어 붙인 다음 정답 영상과의 차이를 손실로 계산한다.

GRPO

GRPO는 같은 질문에 대해 여러 응답을 한꺼번에 샘플링하고, 그 응답들 사이의 상대적 보상 차이로 정책을 업데이트하는 구조다.

for prompt in training_prompts:
    # 1단계: 같은 프롬프트로 여러 응답 샘플링 (그룹)
    responses = [model.generate(prompt) for _ in range(group_size)]  # 예: 8개

    # 2단계: 각 응답에 보상 부여
    rewards = [reward_function(prompt, r) for r in responses]

    # 3단계: 그룹 내 평균과 표준편차로 정규화 (상대적 우열 계산)
    mean_r = mean(rewards)
    std_r = std(rewards)
    advantages = [(r - mean_r) / (std_r + eps) for r in rewards]

    # 4단계: 정책 업데이트 (상대적으로 좋은 응답의 확률은 높이고 나쁜 응답은 낮춤)
    for response, advantage in zip(responses, advantages):
        log_prob = model.log_prob(response, prompt)
        loss = -advantage * log_prob
        loss += kl_penalty(model, reference_model, prompt, response)  # 원래 모델에서 너무 벗어나지 않도록 정칙화
        loss.backward()
    optimizer.step()

별도의 가치 신경망 없이, 그룹 안에서의 평균과 표준편차만으로 각 응답이 상대적으로 얼마나 좋은지를 계산하는 것이 핵심이다.

학습 데이터 구조는 정답이 하나로 고정되어 있지 않고, 프롬프트와 그 프롬프트에 대한 평가 기준만 있으면 된다.

{
  "prompt": "최근 알츠하이머 치료제 연구 동향을 조사해 정리하라",
  "rubric": [
    {"criterion": "최근 2년 내 임상시험 결과를 포함했는가", "weight": 0.3},
    {"criterion": "상반된 연구 결과를 균형있게 다뤘는가", "weight": 0.3},
    {"criterion": "출처를 명확히 인용했는가", "weight": 0.2},
    {"criterion": "결론이 근거에 기반해 신중하게 서술되었는가", "weight": 0.2}
  ]
}

정답 텍스트가 미리 정해져 있는 것이 아니라, 응답을 채점할 루브릭만 있으면 된다. 모델이 같은 질문에 대해 여러 답변을 만들면, 이 루브릭으로 각 답변을 채점해서 상대적 점수를 매기고, 그 점수 차이를 이용해 정책을 업데이트한다. DR Tulu는 이 루브릭 자체도 훈련이 진행되면서 점점 더 정교해지도록 함께 학습시킨다는 점이 추가된 특징이다.

DiT

DiT는 디퓨전 모델, 즉 노이즈를 조금씩 걷어내면서 이미지나 영상을 만들어내는 생성 방식에서, 노이즈를 예측하는 핵심 신경망을 U-Net 대신 트랜스포머로 바꾼 구조다. 원래 디퓨전 모델은 U-Net을 많이 썼는데, U-Net은 이미지를 점점 작게 압축했다가 다시 키우는 구조라 합성곱 연산에 의존한다. DiT는 이미지를 작은 패치로 잘게 잘라서 마치 문장의 단어처럼 하나의 토큰 시퀀스로 취급하고, 그 토큰들을 트랜스포머의 셀프 어텐션으로 처리한다. 비유하자면 그림을 그릴 때 U-Net은 전체 캔버스를 계속 확대 축소하며 다듬는 화가에 가깝고, DiT는 그림을 작은 조각으로 잘라 붙인 모자이크 타일들을 서로 비교하고 조율하며 전체 그림을 완성해가는 방식에 가깝다.

DiT가 기존 U-Net 방식보다 좋은 이유는 두 가지다. 첫째, 트랜스포머는 이미지 크기나 데이터 양이 늘어날수록 성능이 꾸준히 좋아지는 확장성이 검증된 구조라서, 모델과 데이터를 키울수록 U-Net보다 더 안정적으로 품질이 좋아진다. 둘째, 토큰 시퀀스라는 형태를 쓰기 때문에 앞서 설명한 컨디셔닝 채널처럼 텍스트, 이미지, 포즈 같은 다른 종류의 조건 정보를 같은 토큰 시퀀스 안에 자연스럽게 섞어 넣기가 쉽다.

예시

앞서 다룬 Causal Forcing과 OmniShow가 모두 이 DiT 구조를 베이스 모델로 쓴다. OmniShow의 경우 영상의 각 프레임을 패치 단위로 잘라 토큰으로 만들고, 여기에 텍스트와 참조 이미지, 포즈, 오디오에서 나온 조건 토큰들을 함께 섞어서 트랜스포머에 입력한다. 노이즈가 낀 영상 토큰과 조건 토큰들이 셀프 어텐션 안에서 서로 영향을 주고받으면서, 조건에 맞는 방향으로 노이즈를 걷어내는 법을 학습한다.

의사코드

# 1단계: 이미지 또는 영상 프레임을 패치로 분할하고 토큰화
def patchify(image, patch_size=16):
    patches = split_into_patches(image, patch_size)  # 예: 256x256 -> 16x16 패치 256개
    tokens = linear_projection(patches)  # 각 패치를 하나의 벡터 토큰으로 변환
    tokens = tokens + positional_embedding
    return tokens  # shape: [num_patches, hidden_dim]

# 2단계: 노이즈 스텝 정보를 임베딩으로 만들어 조건으로 사용
def timestep_embedding(t):
    return sinusoidal_encode(t)  # 스칼라 t를 hidden_dim 크기 벡터로 변환

# 3단계: DiT 블록 (트랜스포머 블록 + 조건 주입)
class DiTBlock(nn.Module):
    def forward(self, tokens, condition_embed):
        # 조건 임베딩으로 정규화 파라미터를 조절 (adaptive layer norm)
        scale, shift, gate = condition_to_scale_shift_gate(condition_embed)
        x = adaptive_layer_norm(tokens, scale, shift)
        x = x + gate * self.self_attention(x)
        x = adaptive_layer_norm(x, scale, shift)
        x = x + gate * self.mlp(x)
        return x

# 4단계: 전체 forward, 노이즈 예측
def dit_forward(noisy_tokens, t, text_condition):
    condition_embed = timestep_embedding(t) + text_encoder(text_condition)
    x = noisy_tokens
    for block in dit_blocks:  # 예: 28개 블록
        x = block(x, condition_embed)
    predicted_noise = unpatchify(final_linear(x))
    return predicted_noise

# 5단계: 학습 루프
for batch in dataset:
    clean_tokens = patchify(batch.image)
    t = random_timestep()
    noise = sample_gaussian_noise()
    noisy_tokens = add_noise(clean_tokens, noise, t)  # 노이즈 스케줄에 따라 섞기
    predicted_noise = dit_forward(noisy_tokens, t, batch.text_prompt)
    loss = mse_loss(predicted_noise, noise)
    loss.backward()
    optimizer.step()

핵심은 이미지를 패치 토큰으로 바꾼 다음, 노이즈 스텝 정보를 트랜스포머 블록 안의 정규화 파라미터를 조절하는 방식으로 주입한다는 점이다. 이렇게 하면 같은 트랜스포머 블록이 노이즈가 많이 낀 초기 단계와 노이즈가 거의 없는 마지막 단계 모두에서 서로 다르게 동작하도록 조절된다.

학습 데이터 구조

{
  "sample_id": "video_gen_00187",
  "text_prompt": "노을이 지는 해변을 걷는 사람",
  "clean_video_frames": "target_00187.mp4",   # 노이즈가 없는 정답 영상
  "resolution": [256, 256],
  "num_frames": 16,
  "patch_size": 16
}

학습 시에는 정답 영상을 패치로 잘라 토큰으로 만든 다음, 무작위로 고른 노이즈 스텝만큼 인위적으로 노이즈를 섞고, 모델이 그 노이즈를 예측하도록 학습시킨다. 즉 데이터셋 자체에는 노이즈가 없는 깨끗한 영상과 텍스트 프롬프트만 있으면 되고, 노이즈는 학습 과정에서 그때그때 만들어서 씌운다. 조건이 여러 개인 OmniShow 같은 경우는 여기에 참조 이미지, 포즈, 오디오 항목이 앞서 설명한 컨디셔닝 채널 구조로 함께 추가된다.

dLLM

기존 LLM은 문장을 왼쪽에서 오른쪽으로 한 단어씩 순서대로 예측하는 자기회귀 방식을 쓴다. 반면 dLLM은 이미지에 노이즈를 씌웠다가 걷어내는 디퓨전의 원리를 텍스트에 그대로 적용한다. 문장의 토큰들을 무작위로 마스킹, 즉 가려버린 다음, 모델이 가려진 토큰들이 무엇이었는지 한꺼번에 맞히도록 학습시킨다. 비유하자면 기존 LLM이 문장을 왼쪽부터 한 글자씩 순서대로 받아쓰는 방식이라면, dLLM은 빈칸 뚫기 문제지를 받아서 뚫린 빈칸들을 한 번에, 그리고 여러 번 다시 고쳐가며 채워나가는 방식이다.

구조적으로 보면 dLLM은 이미지 패치 토큰 대신 텍스트 토큰을 입력으로 쓴다는 점만 다를 뿐, 트랜스포머 블록 자체는 DiT와 거의 동일하다. 다만 이미지처럼 노이즈를 연속적인 값으로 섞는 대신, 텍스트는 이산적인 토큰이기 때문에 토큰을 마스크 토큰으로 치환하는 방식으로 노이즈를 흉내낸다. 마스킹 비율이 노이즈 스텝 역할을 한다. 마스킹 비율이 높으면 노이즈가 많이 낀 초기 단계이고, 마스킹 비율이 낮으면 노이즈가 거의 걷힌 마지막 단계다.

dLLM이 기존 자기회귀 LLM보다 나은 점은, 문장을 왼쪽부터 순서대로 만들 필요가 없어서 여러 토큰을 동시에 병렬로 생성할 수 있다는 것이다. 앞서 다룬 Any-Order GPT as Masked Diffusion Model 논문에서 언급했듯이 이 병렬 생성 덕분에 추론 속도가 최대 25배까지 빨라질 수 있다. 다만 앞서 다룬 The Flexibility Trap 논문에서 지적했듯이, 어떤 순서로든 생성할 수 있다는 유연성이 오히려 모델을 추론에 중요한 어려운 토큰을 회피하게 만드는 부작용도 있다.

예시

수학 문제를 푸는 상황을 생각해보면, 기존 자기회귀 LLM은 "2 더하기 3은" 다음에 "5" 하나를 예측하고, 그다음 토큰을 예측하는 식으로 왼쪽부터 순서대로 답을 완성해간다. dLLM은 전체 답변 자리에 마스크 토큰을 전부 채워놓은 상태에서 시작해서, 처음에는 확신이 높은 몇몇 자리, 예를 들어 숫자 "5"부터 채우고, 그다음 라운드에서 나머지 마스크된 자리들을 점점 채워나가며 여러 번에 걸쳐 문장 전체를 완성해간다.

의사코드

# 1단계: 텍스트를 토큰화하고 일부를 마스크 토큰으로 치환
def mask_tokens(token_ids, mask_ratio):
    num_to_mask = int(len(token_ids) * mask_ratio)
    mask_positions = random_sample(range(len(token_ids)), num_to_mask)
    noisy_tokens = token_ids.clone()
    for pos in mask_positions:
        noisy_tokens[pos] = MASK_TOKEN_ID
    return noisy_tokens, mask_positions

# 2단계: 마스킹 비율을 노이즈 스텝처럼 사용해 조건으로 임베딩
def mask_ratio_embedding(mask_ratio):
    return sinusoidal_encode(mask_ratio)  # DiT의 timestep_embedding과 동일한 방식

# 3단계: dLLM 블록 (DiT 블록과 구조 동일, 입력만 텍스트 토큰)
class DLLMBlock(nn.Module):
    def forward(self, tokens, condition_embed):
        scale, shift, gate = condition_to_scale_shift_gate(condition_embed)
        x = adaptive_layer_norm(tokens, scale, shift)
        x = x + gate * self.self_attention(x)  # 양방향 어텐션, 인과적 마스크 없음
        x = adaptive_layer_norm(x, scale, shift)
        x = x + gate * self.mlp(x)
        return x

# 4단계: 전체 forward, 마스크된 토큰 예측
def dllm_forward(noisy_tokens, mask_ratio):
    condition_embed = mask_ratio_embedding(mask_ratio)
    x = token_embedding(noisy_tokens)
    for block in dllm_blocks:
        x = block(x, condition_embed)
    predicted_token_logits = final_linear(x)  # 각 위치마다 vocab 크기의 분포
    return predicted_token_logits

# 5단계: 학습 루프
for batch in text_dataset:
    clean_tokens = tokenize(batch.text)
    mask_ratio = random_uniform(0, 1)  # 이미지의 random_timestep과 동일한 역할
    noisy_tokens, mask_positions = mask_tokens(clean_tokens, mask_ratio)
    predicted_logits = dllm_forward(noisy_tokens, mask_ratio)
    # 마스킹된 위치에서만 손실 계산
    loss = cross_entropy(predicted_logits[mask_positions], clean_tokens[mask_positions])
    loss.backward()
    optimizer.step()

# 6단계: 생성 시 여러 라운드에 걸쳐 마스크를 점점 채워나감
def generate(prompt_tokens, answer_length, num_rounds=8):
    tokens = concat([prompt_tokens, [MASK_TOKEN_ID] * answer_length])
    for round in range(num_rounds):
        mask_ratio = 1.0 - (round / num_rounds)
        logits = dllm_forward(tokens, mask_ratio)
        probs, predicted = softmax_and_argmax(logits)
        # 확신이 높은 자리부터 확정하고 나머지는 다음 라운드로
        confident_positions = top_k_by_confidence(probs, k=answer_length // num_rounds)
        for pos in confident_positions:
            tokens[pos] = predicted[pos]
    return tokens

DiT와 비교했을 때 가장 큰 구조적 차이는 셀프 어텐션이 인과적 마스크 없이 양방향으로 열려 있다는 점이다. 기존 자기회귀 LLM은 지금 토큰이 뒤에 나올 토큰을 미리 보지 못하도록 마스킹하지만, dLLM은 마스킹된 자리 이외의 모든 토큰을 양방향으로 참고할 수 있어야 빈칸을 제대로 채울 수 있기 때문이다.

학습 데이터 구조

{
  "sample_id": "text_00512",
  "clean_text": "2 더하기 3은 5이고, 5에 4를 더하면 9이다.",
  "token_ids": [1023, 892, 55, 1104, ...],
  "vocab_size": 32000,
  "max_seq_len": 512
}

DiT의 학습 데이터가 노이즈 없는 깨끗한 영상만 있으면 되는 것처럼, dLLM의 학습 데이터도 마스킹 없는 원본 텍스트만 있으면 된다. 마스킹은 DiT에서 노이즈를 학습 중에 그때그때 씌우는 것과 마찬가지로, 학습 루프 안에서 무작위 비율로 그때그때 만들어서 적용한다. 즉 데이터셋 준비 단계에서는 기존 자기회귀 LLM과 동일한 순수 텍스트 코퍼스를 그대로 쓸 수 있고, 학습 방식만 마스킹과 병렬 예측으로 바뀌는 것이다.


ICML 2026 주요 논문의 연구 기술 분석

이 글은 ICML(International Conference on Machine Learning) 2026 주요 논문의 연구 기술 분석 내용을 간략히 정리한다.

ICML 2026은 2026년 7월 6일부터 11일까지 서울 코엑스에서 열리는 국제머신러닝학회다. 올해는 23918건이 제출되어 6352편이 채택되었고, 채택률은 26.6퍼센트였다. 그런데 학회에서 발표되었다고 해서 모든 논문이 실제로 재현 가능한 것은 아니다. 최근 연구에 따르면 ICML, NeurIPS, ICLR 세 학회의 평균 코드 공개율은 19.5퍼센트에 불과하다. 이번 글에서는 GitHub 저장소가 실제로 공개되어 있고, 가능한 경우 별도의 프로젝트 웹사이트까지 함께 공개된 논문들만 추려서 살펴보았다. 코드와 모델을 직접 실행하거나 응용해볼 수 있는지도 함께 정리했다.

각 논문은 연구목적과 사용 알고리즘, 베이스 모델을 하나의 문단으로 서술했고, 나머지 정보인 데이터셋, 연구 기술 수준, 구현 수준, 관련 링크는 목록 형태로 정리했다.

프로젝트 페이지와 GitHub를 모두 공개한 논문

Causal Forcing, 실시간 대화형 비디오 생성

이 논문은 양방향 확산모델을 소수 스텝의 자기회귀 학생 모델로 증류할 때 발생하는 이론적 결함을 규명하는 연구다. 기존 방법들이 프레임 단위 단사성 조건을 위반한다는 점을 이론적으로 증명하고, 이를 해결하기 위해 자기회귀 교사 모델 기반의 ODE 초기화와 분포 매칭 증류를 결합한 Causal Forcing을 제안했다. 후속 연구인 Causal Forcing플러스플러스에서는 ODE 대신 인과적 일관성 증류 방식을 도입했다. 베이스 모델로는 Wan2.1과 훈위안비디오의 HY1.5-TI2V-8B 비디오 확산 모델을 사용했다.

  • 사용 데이터셋: 대형 비디오 확산모델 사전학습 데이터 기반 자체 증류용 데이터
  • 연구 기술 수준: 최상급이다. 생성모델 이론 증명과 대규모 비디오 디퓨전 증류가 결합되어 있다
  • 구현 수준: 중간이다. 공개된 8B급 체크포인트로 추론 데모는 GPU 한 대로 바로 실행할 수 있지만, 증류 학습 자체를 재현하려면 대규모 인프라가 필요하다
  • 프로젝트 페이지: thu-ml.github.io/CausalForcing.github.io
  • GitHub: github.com/thu-ml/Causal-Forcing

Hibiki-Zero, 정렬 데이터 없는 동시 음성통역

이 논문은 단어 단위 정렬 데이터 없이도 실시간 다국어 동시 음성통역을 가능하게 하는 모델을 다룬 연구다. 프랑스어, 스페인어, 포르투갈어, 독일어에서 영어로의 통역을 대상으로, 먼저 문장 단위로 정렬된 데이터로 지도학습을 진행한 뒤 GRPO 기반 강화학습으로 통역 지연시간을 최적화하는 방식을 사용했다. 베이스 모델은 모시와 히비키 계열의 멀티스트림 디코더이며 파라미터 수는 3B다.

  • 사용 데이터셋: 자체 공개한 15시간 분량의 다국어 벤치마크
  • 연구 기술 수준: 최상급이다. 음성 파운데이션 모델을 처음부터 학습해야 한다
  • 구현 수준: 쉬움이다. 명령어 한 줄로 8기가에서 12기가 VRAM급 GPU에서 즉시 실시간 데모를 구동할 수 있다. 웹 UI로 감싸는 정도의 응용은 매우 용이하다
  • 프로젝트 페이지: hibiki-zero-s2st.github.io
  • GitHub: github.com/kyutai-labs/hibiki-zero

DR Tulu, 심층 리서치 에이전트

이 논문은 정답이 명확하지 않은 장문 심층 리서치 과제, 예를 들어 과학이나 의료 분야 질의에 대해 정책 모델과 함께 진화하는 루브릭으로 강화학습을 진행하는 최초의 완전 오픈 모델을 다룬 연구다. 핵심 알고리즘은 진화하는 루브릭을 활용한 강화학습이라는 뜻의 RLER이며, 멀티 롤아웃과 도구 증강 생성을 지원하는 GRPO 변형을 사용한다. 베이스 모델은 Qwen3-8B-Base다.

  • 사용 데이터셋: 과학, 의료, 일반 도메인의 장문 리서치 벤치마크 네 종류와 서치아레나, 오픈스칼라 데이터
  • 연구 기술 수준: 상급이다. 다만 모델과 데이터, 학습 코드, 평가 하네스까지 전부 오픈소스로 공개되어 있다
  • 구현 수준: 쉬움이다. 허깅페이스에서 체크포인트를 내려받은 뒤 vLLM 서버 두 대와 MCP 서버를 구동하는 것만으로 즉시 데모를 실행할 수 있다
  • 프로젝트 및 블로그 페이지: allenai.org/blog/dr-tulu
  • GitHub: github.com/rlresearch/dr-tulu
  • 모델 페이지: huggingface.co/rl-research/DR-Tulu-8B

The Obfuscation Atlas, RLVR 기만 및 정직성 탐지 연구

이 논문은 검증가능보상 강화학습, 즉 RLVR로 훈련할 때 모델이 화이트박스 거짓말 탐지기를 회피하는 현상을 실증적, 이론적으로 규명한 연구다. 리워드 해킹이 자연스럽게 발생하는 실제 코딩 환경을 구성하고, GRPO와 활성화 기반 기만 탐지 프로브를 결합해 정직한 정책과 은폐된 정책을 구분하는 분류체계를 제시했다. 베이스 모델로는 젬마3-12B-IT를 비롯한 네 개 모델을 사용했다.

  • 사용 데이터셋: 테스트 케이스 하드코딩 시나리오가 포함된 실제 코딩 문제, 그리고 500개 이상 학습된 모델 체크포인트를 허깅페이스에 공개했다
  • 연구 기술 수준: 상급이다. 정렬 연구와 메커니즘 해석, 강화학습 인프라가 결합되어 있다
  • 구현 수준: 중간이다. 코드가 설정, 학습, 탐지기 모듈로 나뉘어 있어 소규모 모델로 프로브 학습과 평가 파이프라인을 재현해볼 수 있다
  • 연구기관 페이지: far.ai/research/the-obfuscation-atlas-mapping-where-honesty-emerges-in-rlvr-with-deception-probes
  • GitHub: github.com/AlignmentResearch/obfuscation-atlas

GitHub 저장소가 상세히 공개된 논문

OmniAgent, 능동 비디오 지각 옴니모달 에이전트

이 논문은 긴 비디오나 여러 모달리티를 이해할 때 전체 영상을 다 보는 대신 필요한 프레임만 능동적으로 탐색하는 에이전트를 다룬다. 72B 모델보다 73퍼센트 적은 프레임으로도 더 나은 성능을 보였다. 비디오 이해 문제를 부분관측 마르코프 결정과정으로 정식화하고, 턴 단위 불확실성을 반영한 TAURA라는 강화학습 기법으로 정책을 학습한다. 베이스 모델은 Qwen2.5-Omni-7B다.

  • 사용 데이터셋: 비디오엠엠이, LV벤치를 포함한 열 개 벤치마크
  • 연구 기술 수준: 상급이다. 비디오 에이전트를 위한 강화학습 설계가 핵심이다
  • 구현 수준: 중간이다. 코드와 짐 형태의 능동지각 환경, 강화학습 및 지도학습 체크포인트가 모두 공개되어 있어 7B급 모델 기준으로 로컬 파인튜닝을 시도해볼 수 있다
  • GitHub: github.com/HarryHsing/OmniAgent

OmniShow, 인간과 사물 상호작용을 통합한 비디오 생성

바이트댄스가 발표한 이 논문은 텍스트, 참조 이미지, 오디오, 포즈 조건을 하나의 모델로 통합한 최초의 인간과 사물 상호작용 비디오 생성 올인원 모델을 제안한다. 채널 단위로 조건들을 통합해 주입하는 방식을 사용했으며, 베이스 모델은 Wan 기반의 DiT 비디오 확산 모델이다.

  • 사용 데이터셋: 자체 구축한 HOIVG벤치
  • 연구 기술 수준: 최상급이다. 대규모 비디오 확산 모델 학습이 필요한 산업 연구다
  • 구현 수준: 중간이다. 추론 코드와 체크포인트가 공개되어 데모 실행은 가능하지만 요구되는 GPU 자원이 크다
  • GitHub: github.com/Correr-Zhou/OmniShow

RLAnything과 AutoTool, 에이전틱 강화학습 오픈소스 레시피

젠버스 연구팀이 공개한 이 두 논문은 에이전틱 강화학습을 데이터, 알고리즘, 추론 모드라는 세 축으로 체계적으로 분석한 연구다. 실제 엔드투엔드 궤적 기반의 지도학습과 강화학습을 결합하고, 리워드 클리핑과 엔트로피 유지 기법을 적용해 소형 모델이 대형 모델을 능가하는 학습 레시피를 완성했다. 베이스 모델은 Qwen2.5-7B와 Qwen3-4B이며, 4B 규모의 DemyAgent 체크포인트를 공개했다.

  • 사용 데이터셋: AIME 2024와 2025, GPQA다이아몬드, LiveCodeBench-v6
  • 연구 기술 수준: 상급이다. 에이전틱 강화학습 파이프라인을 다룬다
  • 구현 수준: 쉬움이다. DemyAgent-4B 체크포인트가 허깅페이스에 공개되어 있어 로컬 평가와 소규모 파인튜닝을 바로 시도할 수 있다
  • GitHub: github.com/Gen-Verse/Open-AgentRL

S2L-PO, 작은 모델이 GRPO에서 정책 다양성을 더 잘 탐색한다

이 논문은 LLM 추론용 강화학습인 GRPO에서 오히려 작은 모델이 정책 수준의 다양성 탐색에 유리하다는 점을 규명하고, 이를 활용하는 학습 기법을 제안한 연구다. Qwen3 계열 모델을 소형과 대형으로 나누어 비교 실험을 진행했다.

  • 사용 데이터셋: 수학 추론 벤치마크
  • 연구 기술 수준: 상급이다. RL 알고리즘에 대한 실증 연구다
  • 구현 수준: 쉬움이다. 소형 모델 기준으로 GRPO 코드를 일부 수정하는 수준이라 재현이 비교적 간단하다
  • GitHub: github.com/qishisuren123/S2L-PO

NT-SSM, 그래프 협업 필터링의 대조학습 재고

이 논문은 그래프 기반 추천시스템, 즉 협업 필터링에서 대조학습의 한계를 지적하고 간단한 대안을 제시한 연구다. 기존 표준 모델인 LightGCN을 베이스 모델로 삼아 새로운 정규화 기반 대안 기법을 적용했다.

  • 사용 데이터셋: 아마존, 옐프 등으로 추정되는 표준 추천시스템 벤치마크
  • 연구 기술 수준: 중상급이다. 그래프 신경망 기반 추천시스템을 다룬다
  • 구현 수준: LightGCN 기반의 비교적 경량 모델이라 로컬 실험 재현이 용이하다
  • GitHub: github.com/geon0325/NT-SSM

해마 내후각피질 영감 세계모델

이 논문은 뇌의 해마와 내후각피질 구조에서 영감을 받아 구조적 추상화와 일반화가 가능한 세계모델을 설계한 연구다. 계산신경과학 기반의 구조학습 알고리즘을 사용했으며, 사전학습된 파운데이션 모델을 쓰지 않고 커스텀 순환신경망 기반 인지 모델을 처음부터 구성했다.

  • 사용 데이터셋: 인지과학 실험용 합성 환경
  • 연구 기술 수준: 최상급이다. 계산신경과학과 세계모델이 결합되어 있다
  • 구현 수준: 중간이다. 주피터 노트북으로 공개되어 있어 소규모 실험을 재현하고 수정해보기가 비교적 수월하다
  • GitHub: github.com/senngadaisuki/hpc-mec-worldmodel

CaDRe, 기후 분석을 위한 인과 구조 학습

이 논문은 은닉 동적 과정을 고려한 일반적인 인과 구조 학습 기법을 기후 데이터 분석에 적용한 연구다. 비선형 독립성분분석 기반의 인과 표현 학습과 인과 발견 알고리즘을 사용하며, 사전학습 모델 없이 커스텀 인과표현학습 신경망을 사용한다.

  • 사용 데이터셋: 기후과학 시계열 데이터
  • 연구 기술 수준: 상급이다. 인과추론과 시계열 분석이 결합되어 있다
  • 구현 수준: 중간이다. 공개된 코드로 자체 시계열 데이터에 적용해볼 수 있지만 인과추론 이론에 대한 이해가 선행되어야 한다
  • GitHub: github.com/MinghaoFu/CaDRe

LatentTSF, 관측에서 상태로 이어지는 잠재 시계열 예측

이 논문은 원시 관측치가 아니라 잠재 상태 공간에서 시계열을 예측하는 프레임워크를 다룬다. 잠재공간 상태추정과 시계열 예측을 결합한 방식이며, 파이토치 기반의 커스텀 상태공간모델을 베이스로 사용한다.

  • 사용 데이터셋: 표준 시계열 예측 벤치마크
  • 연구 기술 수준: 중상급이다
  • 구현 수준: 파이토치 공식 구현체가 공개되어 있어 자체 데이터를 적용하기가 비교적 쉽다
  • GitHub: github.com/Muyiiiii/LatentTSF

FiSeR, 크로스 도메인 AI 이미지 탐지를 위한 세밀한 출처 표현

이 논문은 디퓨전이나 GAN 등 서로 다른 생성모델이 만든 AI 이미지를 도메인이 달라도 탐지할 수 있는 세밀한 출처 특징 추출 기법을 다룬다. 표준 CNN과 ViT 백본을 기반으로 한 출처 특화 표현학습 방식을 사용한다.

  • 사용 데이터셋: 다양한 생성모델 출처의 AI 이미지 벤치마크
  • 연구 기술 수준: 상급이다. 포렌식과 탐지 모델을 다룬다
  • 구현 수준: 이미지 분류기 수준의 모델이라 재현 난이도가 상대적으로 낮다
  • GitHub: github.com/heyongxin233/FiSeR

CoopEval, 협력 유지 메커니즘과 LLM 에이전트 벤치마킹

이 논문은 죄수의 딜레마류의 사회적 딜레마 상황에서 협력을 지속시키는 메커니즘과 LLM 에이전트의 협력 행동을 벤치마킹한 연구다. 게임이론 기반의 다중 에이전트 시뮬레이션을 사용하며, 별도의 파운데이션 모델 학습 없이 GPT와 클로드 계열 API 기반 LLM 에이전트를 그대로 활용한다.

  • 사용 데이터셋: 자체 구축한 사회적 딜레마 게임 환경
  • 연구 기술 수준: 상급이다. 게임이론과 LLM 에이전트가 결합되어 있다
  • 구현 수준: LLM API 호출 기반의 게임 시뮬레이션이라 AI 코딩 도구로 비교적 쉽게 재현하고 확장할 수 있다
  • GitHub: github.com/Xiao215/CoopEval

SubspacePathPruner, 추론 시점 LLM 구조적 프루닝

이 논문은 별도의 재학습 없이 추론 시점에 프로브 기반의 표현과 파라미터 결합을 활용해 LLM을 구조적으로 경량화하는 기법을 다룬다. 라마와 Qwen 등 공개된 LLM에 바로 적용할 수 있도록 설계되었다.

  • 사용 데이터셋: 표준 LLM 압축 벤치마크
  • 연구 기술 수준: 상급이다. 모델 압축을 다룬다
  • 구현 수준: 재학습이 필요 없는 방식이라 기존 오픈소스 LLM에 바로 적용해볼 수 있다
  • GitHub: github.com/GongZhiren/SubspacePathPruner

정리

이번에 정리한 논문들을 살펴보면 몇 가지 흐름이 보인다.

첫째, 공개 수준이다. Causal Forcing, Hibiki-Zero, DR Tulu, Obfuscation Atlas 네 편은 프로젝트 페이지와 GitHub를 모두 갖추고 있어 데모와 체크포인트까지 즉시 사용할 수 있는 최고 수준의 공개도를 보인다. 나머지 논문들은 대부분 GitHub 저장소만 공개되어 있지만 README와 체크포인트가 상세해서 실질적으로 재현이 가능한 수준이다.

둘째, 베이스 모델 관점이다. 처음부터 새로 학습한 파운데이션 모델을 다루는 연구는 Causal Forcing, Hibiki-Zero, CaDRe, 해마 내후각피질 세계모델 등이며 대체로 기술 난이도가 최상급이다. 반면 기존에 공개된 LLM이나 VLM 위에 파인튜닝, 프롬프트, 경량 어댑터를 얹는 방식의 연구, 예를 들어 DR Tulu의 Qwen3-8B, OmniAgent의 Qwen2.5-Omni-7B, RLAnything과 AutoTool의 Qwen 계열, GR-LoRA와 AREA와 HypCL의 CLIP 등은 구현 난이도가 가장 낮고 응용 확장성이 크다. 베이스 모델 없이 알고리즘이나 이론 자체가 기여인 연구, 예를 들어 린 라이브러리나 CaDRe, Learning to Emulate Chaos 같은 경우는 코드가 공개되어 있어도 이론적 배경을 먼저 이해해야 정확하게 활용할 수 있다.

셋째, 구현 수준 관점이다. 명령어 한 줄로 실행되는 Hibiki-Zero, 서버만 띄우면 되는 DR Tulu, 허깅페이스 체크포인트만 내려받으면 되는 Causal Forcing처럼 설치, 실행, 커스터마이징 흐름을 그대로 따라갈 수 있는 논문들이 실질적인 구현 후보다. LoRA 계열이나 활성화 함수 교체, 재학습이 필요 없는 프루닝 기법처럼 기존 모델에 얹는 방식의 연구도 코드 복잡도가 낮아 구현 성공률이 높다. 반대로 형식수학 증명이나 쌍곡기하학 기반 모델처럼 특수한 수학적 프레임워크를 요구하는 연구는 코드가 공개되어 있어도 정확히 재현하기가 쉽지 않다.

이 글은 2026년 7월 9일 기준으로 웹 검색을 통해 개별 확인한 GitHub 저장소와 프로젝트 페이지 링크를 바탕으로 작성했다. 저장소는 계속 업데이트되므로 실제 활용 전에 최신 링크를 다시 확인하는 것이 좋다.

레퍼런스

3DGS 가우시안 스플리터 기반 건물 인프라 3차원 모델 생성 기술 분석

이 글은 3DGS 가우시안 스플리터 기반 건물 인프라 3차원 모델 생성 기술 분석 내용을 나눔한다.

개요
건물, 교량, 도로 등 대형 인프라 시설의 효율적인 유지관리 및 디지털 트윈 구성을 위해서는 현장의 3차원 형상을 정밀하게 복원하는 기술이 필수적이다. 기존의 Structure from Motion(SfM) 및 Multi-View Stereo(MVS) 기반 포인트 클라우드 생성 방식은 연산 시간이 대단히 길고 복잡한 그래픽 메시를 다루어야 한다는 한계가 있었다. 이후 등장한 NeRF(Neural Radiance Fields) 또한 정밀한 렌더링은 가능하나 훈련 및 추론 속도가 느리다는 단점이 존재했다.

최근 고속 렌더링 기술로 주목받는 3D Gaussian Splatting (3DGS) 기술은 타일 기반 래스터화를 통해 실시간 3D 복원을 가능하게 했다. 오픈소스 프로젝트 EOGS2 (Efficient & Optimal Gaussian Splatting for Infrastructure Structure) 프로젝트는 이러한 3DGS 알고리즘을 확장 및 최적화하여, 실외 건물 및 대규모 인프라 구조물 복원에 특화된 3D 모델링 파이프라인을 제시한다.

핵심 기술 요소 및 시스템 구조
EOGS2 프로젝트의 핵심은 정밀도 높은 위치 정보(주로 UAV 드론 촬영 데이터 및 COLMAP 경로 데이터)와 결합하여 가우시안 타일 생성을 최적화하는 기법에 있다.

1) 3D 가우시안 스플래팅 (3DGS) 기반 최적화
  • 공간 표현: 공간의 개별 점을 단순 점(Point)이 아닌 공간적 범위, 방향, 색상, 투명도를 갖는 3D 가우시안(Ellipsoid) 집합으로 표현한다.
  • 학습 파라미터: 각 가우시안 타일의 중심 위치(Position, XYZ), 척도(Scale, S), 회전(Rotation, R), 불투명도(Opacity), 색상 표현을 위한 구면 조화 함수(Spherical Harmonics, SH) 계수를 기디언트 하강법으로 학습한다.
  • 인프라 맞춤 밀도 제어 (Density Control): 평평한 벽면, 창문 프레임, 복잡한 교량 입체 구조 등 건물 인프라의 특성에 맞춰 가우시안 타일을 분할(Split)하거나 복제(Clone)하여 디테일을 정밀하게 살린다.
2) 대규모 인프라 데이터셋 및 카메라 포즈 통합
드론(UAV)이나 육상 카메라로 촬영된 고해상도 영상을 기반으로 COLMAP 기법을 사전 구동하여 초깃값 포인트 클라우드 및 카메라 외부 파라미터(Extrinsics)를 확보한다.
건물 외벽의 텍스처 반복 패턴이나 기하학적 가장자리(Edge) 부분에서의 기하학적 왜곡을 줄이기 위해 최적화 손실 함수(Loss Function)에 L1 Loss와 D-SSIM(Structural Similarity)을 병합 사용한다.

건물 인프라 모델링 관점에서의 주요 장점
1) 실시간 복원 및 고속 렌더링
실제 구축된 가우시안 모델은 CUDA 래스터라이저를 통해 초당 100~200 FPS 이상의 실시간 속도로 뷰포트 전환 및 카메라 시점 변경을 지원한다. 이는 대형 건물이나 설비 점검 시 실시간 3D 인터랙티브 관제가 가능함을 의미한다.

2) 미세 구조물 및 경계 표현력 향상
기존 Mesh 변환 방식에서 흔히 발생하는 에지(Edge) 무너짐이나 텍스처 뭉개짐 현상이 대폭 개선된다. 건물 외벽의 균열, 배관, 철골 구조 등 인프라 안전점검에 필수적인 미세 요소를 효과적으로 복원한다.

3) 대용량 파이프라인의 효율성
NeRF 대비 학습 속도가 수십 배 이상 빠르며, 메시(Mesh) 재구성 없이 가우시안 타일 포맷(`.ply`)으로 직관적인 대용량 3D 데이터 저장이 가능한다.

한계점 및 향후 발전 방향
1) 동적 정적 객체 분리
건물 주변을 지나는 차량, 사람 등 동적 장애물이 촬영 영상에 포함될 경우 가우시안 잔상이 남아 모델 품질이 저하될 수 있다. 사전 튜닝 파이프라인(Masking) 결합이 요구된다.

2) 물리적 메시(Mesh) 변환의 필요성
3DGS는 시각적 렌더링에 최적화되어 있어, 시뮬레이션이나 충돌 감지(Physics/Collision Test)를 활용하려면 가우시안 타일을 Polygon Mesh로 전환하는 후처리 알고리즘(TSDF, Marching Cubes 연계 등)이 필요한다.

마무리
EOGS2 프로젝트는 3DGS 기술을 건축 및 인프라 영역으로 확장하여 고품질의 3D 공간 복원을 가능하게 만든 우수한 연구 사례이다. 향후 스마트 시티, 디지털 트윈 기반 시설물 유지관리, VR/AR 시뮬레이터 및 드론 자율주행용 3D Map 구축 기술의 핵심 프레임워크로 폭넓게 활용될 것으로 기대된다.

레퍼런스

2026년 6월 21일 일요일

산업 특화 AI LLM, VLM 모델 개발 사례 및 기술 분석

이 글은 산업 특화 AI LLM, VLM 모델 개발 사례 및 기술 분석 내용을 간략히 정리한 것이다. 

산업 분야 복합추론(Complex Reasoning) 특화 모델 및 파이프라인 개발을 위해 최근 3년 내 공개된 국내외 도메인 특화 모델의 개발 사례를 정리한다. 의료, 법률, 과학 등 타 전문 도메인에서 환각(Hallucination)을 제어하고 다단계 논리 추론을 성공시킨 파이프라인의 핵심 구조와 데이터셋 예시를 정리하고, 이를 건설, 기계제조, 물류 분야에 적용한 최신 기술 트렌드를 제시한다.

타 도메인 특화 복합추론 모델 및 파이프라인 사례
Fully Open Meditron (의학 분야)
  • 개념 및 특징: EPFL 연구진 등이 개발한 의료 특화 LLM 파이프라인으로, 학습 데이터셋 구축부터 정제, 평가까지 전 과정을 완전히 투명하게 공개한 오픈소스 프로젝트이다. Base 모델의 환각을 방지하기 위해 임상 지침(Clinical Guidelines)에 기반한 검증 루프와 전문가 검토(Clinician-vetted) 과정을 거쳐 합성 데이터를 증강하는 파이프라인을 구축하였다.
  • 프로젝트 링크: EPFLiGHT FullyOpenMeditron GitHub / Fully Open Meditron 논문
데이터셋 예시 (Instruction Tuning Format):
{
"instruction": "임상 가이드라인에 기반하여 환자의 증상을 진단하고 치료 계획을 수립하라.",
"input": "환자(65세, 남성)는 고혈압 기왕력이 있으며, 2시간 전부터 시작된 극심한 흉통과 호흡곤란을 호소함. 혈압 160/95 mmHg, 심박수 105회/분.",
"thought": "1. 흉통과 호흡곤란은 급성 관상동맥 증후군(ACS) 또는 대동맥 박리의 가능성을 시사함. 2. 고혈압 기왕력이 있으므로 심전도(ECG) 및 트로포닌 수치 확인이 최우선임. 3. 가이드라인에 따라 산소 공급 및 아스피린 투여를 고려해야 함.",
"output": "급성 관상동맥 증후군(ACS)이 의심되므로 즉시 12유도 심전도 검사 및 심근효소(Troponin) 검사를 시행해야 한다. 가이드라인에 의거하여 금기가 없는 한 아스피린 300mg을 즉시 경구 투여하고 응급 심혈관 중재술이 가능한 시설로 이송을 준비한다."
}

PMC-LLaMA (의학·바이오 분야)
  • 개념 및 특징: PubMed Central(PMC)의 학술 논문 480만 편 이상을 기반으로 LLaMA 모델을 지속 사전학습(Continued Pre-training, CPT)하고 의학적 인과관계를 추론할 수 있도록 미세조정한 모델이다. 의학적 텍스트 간의 복잡한 상관관계를 학습하여 전문 지식 부족으로 인한 환각을 대폭 줄였다.
  • 프로젝트 링크: [chaoyi-wu PMC-LLaMA GitHub](https://github.com/chaoyi-wu/PMC-LLaMA)
데이터셋 예시 (Medical QA Format):
{
  "instruction": "제시된 의학적 질문에 대해 논리적 근거와 함께 최적의 옵션을 선택하라.",
  "input": "질문: 23세 임산부가 배뇨 시 타는 듯한 통증으로 내원함. 비용 차단이나 약물 알레르기는 없음. 늑골척추각 압통은 없음. 다음 중 가장 적절한 치료제는 무엇인가? 옵션: A. Ampicillin, B. Ceftriaxone, C. Doxycycline, D. Nitrofurantoin",
  "output": "정답은 D. Nitrofurantoin이다. 임신 중 발생한 단순 방광염(Uncomplicated Cystitis)의 1차 치료제로는 Nitrofurantoin 또는 Amoxicillin-clavulanate가 권장된다. C는 임산부에게 금기이며, A와 B는 단순 방광염의 1차 선택지로 부적절하다."
}

Saul-LM (법률 분야)
  • 개념 및 특징: 법률 도메인에 특화된 7B 규모의 모델로, 대규모 법률 코퍼스로 CPT를 수행한 후 법률 명제 생성 및 조항 검토의 formal validity(형식적 타당성)를 극대화하도록 파이프라인이 설계되었다. 계약서 해석이나 규제 준수 여부를 다단계로 추론하는 데 특화되어 있다.
  • 프로젝트 링크: sxu3 LP-Eval GitHub (Saul-LM 평가 및 벤치마크)
데이터셋 예시 (Legal Reasoning Format):
JSON
{
 "instruction": "법률 조항과 분쟁 상황을 분석하여 귀책 사유 및 계약 위반 여부를 추론하라.",
 "input": "계약조항: 제12조(지체상금) 공급자가 약정된 기한 내에 목적물을 인도하지 못할 경우, 지체일수 1일당 총 계약금액의 0.1%를 지체상금으로 지급한다. 단, 불가항력적인 사유는 예외로 한다. 상황: 공급업체 A는 홍수로 인한 원자재 수급 불능으로 인해 납기를 10일 지체함.",
 "thought": "1. 홍수가 계약서 상 '불가항력적 사유'에 부합하는지 민법 및 판례 기준 검토 필요. 2. 일반적인 기상 악화와 달리 재해 수준의 홍수는 불가항력으로 인정될 여지가 있음. 3. 따라서 지체상금 면제 조항이 적용될 가능성이 높음.",
 "output": "공급업체 A의 납기 지체는 홍수라는 자연재해(불가항력적 사유)에 기인한 것이므로, 제12조 단서 조항에 따라 지체상금 지급 의무가 면제될 가능성이 높다. 다만, 홍수 발생 직후 지체 없이 이 사실을 통보하고 증빙했는지 여부를 추가 확인해야 한다."
}

SciGLM (과학·공학 분야)
  • 개념 및 특징: 수식, 공학적 메커니즘, 화학식 등 다단계 논리 추론이 필수적인 과학 도메인을 위해 개발된 모델이다. 데이터 부족 문제를 해결하기 위해 '자가 반성적 지시어 주석(Self-Reflective Instruction Annotation)' 프레임워크를 도입하여, 모델 스스로 추론 단계를 비판하고 수정하는 파이프라인을 구축하였다.
  • 프로젝트 링크: [THUDM SciGLM GitHub](https://github.com/THUDM/SciGLM)
데이터셋 예시 (Scientific Reasoning Format):
{
"instruction": "물리학적 법칙을 적용하여 주어진 공학적 문제를 해결하고 계산 과정을 기술하라.",
"input": "질량 10kg의 물체가 마찰이 없는 30도 경사면을 따라 미끄러져 내려갈 때, 물체의 가속도를 구하라. (중력가속도 g = 9.8 m/s^2)",
"thought": "1. 경사면을 따라 내려가는 힘 F = m * g * sin(theta)이다. 2. 뉴턴의 제2법칙 F = m * a를 적용하면 m * a = m * g * sin(theta)가 된다. 3. 질량 m을 소거하면 가속도 a = g * sin(theta)이다. 4. sin(30도) = 0.5이므로 9.8 * 0.5를 계산한다.",
"output": "경사면 방향으로 작용하는 성분력은 $F = mg \sin(30^\circ)$이다. 뉴턴의 제2법칙($F=ma$)에 의해 $ma = mg \sin(30^\circ)$가 성립하므로, 가속도 $a = g \sin(30^\circ)$가 된다. 따라서 가속도는 $9.8 \times 0.5 = 4.9 \text{ m/s}^2$이다."
}

산업 분야별 특화 모델 학습 및 파이프라인 개발 사례
건설(Construction) 분야
건설 표준 시방서(KDS, KCS), 설계 가이드라인, 국토교통부 고시 법령 등 방대한 건설 도메인 문서를 CPT 및 SFT로 학습시키는 파이프라인이다. 수치적 기준과 규제 조건의 환각을 방지하기 위해 LLM을 지식 그래프(Knowledge Graph) 및 BIM(빌딩정보모델링) 메타데이터와 결합한 'Agentic RAG' 구조를 주로 채택한다.

데이터셋 예시 (건설 시방서 복합추론):
JSON
{
"instruction": "국가건설기준에 의거하여 현장 시공 계획의 적합성을 판정하고 근거를 제시하라.",
"input": "현장 상황: 건축물 지하 외벽 콘크리트 타설 계획 중임. 설계 강도는 24MPa이며, 동절기 환경(일평균 기온 2도)에서 시공 예정임. 현장 감리는 일반 포틀랜드 시멘트를 사용한 표준 배합으로 타설을 승인하려 함.",
"thought": "1. 일평균 기온이 4도 이하로 떨어지는 동절기 환경이므로 '동절기 콘크리트(한중 콘크리트)' 규정이 적용되어야 함. 2. 한중 콘크리트 시공 시 초기 동해 방지를 위한 양생 및 가열 계획이 필수적임. 3. 일반 배합 그대로 타설 시 초기 동해로 인한 균열 및 강도 저하 리스크가 매우 큼.",
"output": "적합성 판단: 부적합. 일평균 기온이 4도 이하인 조건이므로 KCS 14 20 40(한중 콘크리트) 기준에 따라 특수 배합 및 보온 양생 계획이 수립되어야 한다. 일반 포틀랜드 시멘트를 사용한 표준 배합으로 동절기에 그대로 타설할 경우 초기 동해로 인한 구조물 성능 저하가 발생하므로, 가열 양생 또는 동결방지제 사용 계획을 포함한 시공 계획서로 전면 수정해야 한다."
}

기계제조(Manufacturing) 분야
설비 매뉴얼, 고장 형태 영향 분석(FMEA) 문서, 센서 알람 로그 데이터를 결합한 문제 해결형 추론 모델 파이프라인이다. 텍스트 로그가 입력되면 고장의 근본 원인을 추론하고 정비 절차(SOP) API를 호출하는 'Tool-use 파이프라인' 형태로 구동된다.

데이터셋 예시 (설비 고장 진단 복합추론):
{
"instruction": "제조 설비의 에러 로그와 정비 매뉴얼을 매칭하여 근본 원인을 분석하고 조치 절차를 생성하라.",
"input": "로그 데이터: [Error Code 0x4F2] CNC 밀링 머신 주축(Spindle) 과부하 및 온도 85도 돌파. 유압 시스템 압력 저하 발생.",
"thought": "1. 에러 코드 0x4F2는 주축 과열 관련 오류임. 2. 유압 압력 저하가 동반된 것으로 보아 냉각유 공급 펌프 오작동 또는 유압 라인 누유 가능성이 높음. 3. 조치 순서는 주축 정지 -> 유압 압력 체크 -> 냉각 시스템 점검 순이어야 함.",
"output": "근본 원인 분석: 유압 시스템 압력 저하로 인한 주축 냉각 유량 부족 및 마찰열 발생으로 추론됨. 조치 절차: 1단계 - CNC 장비를 즉시 비상 정지하여 주축 손상을 방지함. 2단계 - 유압 펌프 레벨 및 라인 누유 여부를 육안 점검함. 3단계 - 냉각기(Chiller)의 필터 막힘 상태를 확인 후 정비 매뉴얼 4-1장에 따라 유압 밸브를 리셋함."
}

물류(Logistics & SCM) 분야
공급망 지연, 기상 변화, 통관 리스크 등 비정형 돌발 변수가 발생했을 때 대안 경로와 운영 비용을 자율 계산하는 수학적 추론 모델 파이프라인이다. LLM이 상황을 파악한 뒤 직접 최적화 알고리즘 코드(Python)를 생성하여 실행하고, 에러가 발생하면 자가 교정(Self-Correction)하는 구조로 개발된다.

데이터셋 예시 (SCM 돌발 상황 의사결정 추론):
JSON
{
"instruction": "물류망 마비 상황에 대응하는 대체 운송 라우팅 계획을 수립하고 물류비용 변화를 추론하라.",
"input": "상황: A항구 파업으로 인해 예정된 부품 500톤의 하역이 불가능함. 대체 항구 B를 이용할 경우 내륙 운송 거리가 150km 증가하며, 트럭 운송 단가는 톤·km당 150원임.",
"thought": "1. 대체 경로 B 선택 시 추가 내륙 운송 비용 산출 필요. 2. 추가 비용 = 500톤 * 150km * 150원 = 11,250,000원. 3. 납기 지연으로 인한 페널티 비용과 비교하여 최종 의사결정을 내려야 함.",
"output": "대응 계획: 선박을 대체 항구 B로 회항 조치한다. 이로 인해 발생하는 추가 내륙 물류비용은 총 11,250,000원($500 \times 150 \times 150$)으로 산출된다. 이는 원래 항구 A에서 파업 종료를 대기할 때 발생하는 라인 중단 페널티 비용(일일 50,000,000원 상당)보다 경제적이므로 회항 파이프라인을 즉시 가동하는 것이 타당하다."
}

결론
Fully Open Meditron이나 SciGLM 같은 도메인 특화 모델들의 성공 요인은 단순한 텍스트 학습이 아니라, 전문가의 사고 흐름을 모방한 논리적 추론 경로(Chain-of-Thought, Thought 태그) 데이터의 대량 구축 및 정제에 있다.

따라서 현재 진행 중인 건설 AI 연구에서 환각을 제어하고 복합추론 능력을 강화하기 위해서는 아래와 같은 파이프라인 구축 전략이 요구된다.
  • 지식 주입과 논리 분리: Base 모델에 억지로 암기시키기보다 구조화된 텍스트 코퍼스로 CPT를 수행한 뒤, RAG 파이프라인과 결합하여 데이터의 정확성을 보장해야 한다.
  • CoT 데이터셋 합성: 실제 엔지니어의 문제 해결 프로세스를 `<thought>` 태그 내에 단계별(Step-by-step)로 명시한 지시어 데이터셋을 최소 수만 건 이상 구축하여 SFT를 진행하는 것이 필요하다.
레퍼런스

부록: 데이터 학습 파이프라인 예시
파이프라인

[Base Model] ---> [1. CPT 단계] -----------> [2. SFT/Reasoning 단계] --> [3. RAG/Agent 단계] - 스케일: 20B~30B 토큰 - 스케일: 5만~10만 건 지시어 - 실시간 수치 검증 - 목적: 건설 용어/지식 주입 - 목적: CoT(<thought>) 추론 - 목적: 환각 완전 제어

CPT(지속 사전학습) 코퍼스 예시
{"text": "[건설기준코드: KDS 41 10 05 : 2022 건축구조기준 총칙] 3. 설계하중 (1) 건축물 및 구축물은 구조적 안전성을 확보하도록 이 기준에서 규정한 고정하중, 활하중, 적설하중, 풍하중, 지진하중 등의 설계하중에 대하여 견딜 수 있도록 구조 설계되어야 한다. (2) 특수한 환경에 위치한 구조물의 경우, 토압, 수압, 파랑하중, 온도하중 등 발생 가능한 모든 유효한 하중의 영향을 추가로 고려하여야 한다.", "metadata": {"source": "국가건설기준센터", "domain": "건설_구조공학", "doc_type": "KDS", "code_id": "KDS_41_10_05", "year": "2022"}}
{"text": "[LH 전문시방서: 31510 콘크리트공사] 2.1 재료 (1) 한중 콘크리트 시공 시 사용하는 시멘트는 고로슬래그 시멘트의 초기 강도 발현 지연을 고려하여, 특별한 지정이 없는 한 일반 포틀랜드 시멘트(KS L 5201) 사용을 원칙으로 한다. (2) 초기 동해 방지를 위해 가열 양생 시, 급격한 건조 및 온도 변화로 인한 균열 방지 대책을 시공 계획서에 명시하여야 한다.", "metadata": {"source": "LH공사", "domain": "건설_시공공학", "doc_type": "Specification", "code_id": "LH_31510", "year": "2024"}}

지도 미세조정 코퍼스 예시
{
  "messages": [
    {
      "role": "user",
      "content": "현재 동절기 환경(일평균 기온 1.5도)에서 지하 주차장 슬래브 콘크리트 타설을 준비 중이다. 시공사에서 조강 포틀랜드 시멘트를 사용하고, 타설 후 2일간 천막을 치고 갈탄을 태워 보온 양생을 하겠다는 계획서를 제출했다. 이 시공 계획의 기술적 문제점과 국가건설기준에 따른 보완 요구사항을 추론하라."
    },
    {
      "role": "assistant",
      "content": "<thought>\n1. 주어진 상황 분석: 일평균 기온 1.5도이므로 KCS 14 20 40(한중 콘크리트) 적용 대상이다.\n2. 시공사 계획 검토:\n   - 자재: 조강 포틀랜드 시멘트 선택은 초기 강도 확보에 유리하므로 타당하다.\n   - 양생 방법: 갈탄 보온 양생 계획 수립함.\n3. 갈탄 양생의 문제점 인출:\n   - 갈탄 연소 시 발생하는 이산화탄소(CO2)가 콘크리트 표면과 반응하여 탄산화(중성화)를 유발함. 이는 표면 강도 저하 및 균열의 원인이 됨.\n   - 밀폐 공간 내 일산화탄소(CO) 축적으로 인한 작업자 질식 재해 위험 존재.\n4. 국가건설기준(KCS) 부합성 체크:\n   - KCS에서는 한중 콘크리트 가열 양생 시 이산화탄소에 의한 탄산화 방지 대책을 세우거나 열풍기 등 간접 가열 방식을 권장함.\n5. 결론 및 보완 지시 도출:\n   - 갈탄 양생 전면 수정 또는 CO2 배출 제어 대책 요구.\n   - 열풍기(전기 또는 가스) 방식으로 변경 권고.\n   - 작업자 출입 통제 및 환기 시설 매뉴얼 추가 요구.\n</thought>\n제출된 시공 계획서는 국가건설기준(KCS 14 20 40 한중 콘크리트) 및 현장 안전 관리 기준에 의거하여 승인 불가하며, 아래와 같은 기술적 문제점에 대한 보완 조치가 필요하다.\n\n1. 콘크리트 품질 저하 (탄산화 위험):\n갈탄 연소 시 대량의 이산화탄소(CO2)가 발생한다. 경화되지 않은 초기 콘크리트 표면이 고농도의 이산화탄소에 노출되면 수화 생성물인 수산화칼슘과 반응하여 탄산칼슘을 형성하는 '초기 탄산화(중성화)' 현상이 발생한다. 이는 콘크리트 표면을 푸석하게 만들고 장기적인 내구성을 심각하게 저하시킨다.\n\n2. 보완 요구사항:\n- 가열 방식을 갈탄 연소 방식에서 이산화탄소 발생이 없는 전기 열풍기 또는 가스식 열풍기(간접 가열) 방식으로 변경하여 재제출해야 한다.\n- 만약 부득이하게 갈탄을 사용해야 할 경우, 콘크리트 표면에 CO2가 직접 닿지 않도록 완전 밀폐 및 외부 배기 덕트 라인 설치 계획을 수립해야 하며, 질식 사고 방지를 위한 산소 및 CO 농도 측정기 배치, 환기 팬 가동 계획을 안전 계획서에 추가해야 한다."
    }
  ]
}

RAG 에이전트 코퍼스 포맷 예시
{
  "messages": [
    {
      "role": "user",
      "content": "강재 휨재의 국부좌굴을 검토하려고 한다. SM355 강재를 사용한 H형강 보의 플랜지 폭두께비 제한값을 확인하고 싶다. 관련 설계를 진행할 수 있도록 국가건설기준 규격을 조회하여 판단하라."
    },
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "id": "call_const_api_01",
          "type": "function",
          "function": {
            "name": "search_kds_limits",
            "parameters": {
              "standard_code": "KDS 41 31 00",
              "keyword": "플랜지 폭두께비 제한값",
              "steel_grade": "SM355"
            }
          }
        }
      ]
    },
    {
      "role": "tool",
      "tool_call_id": "call_const_api_01",
      "name": "search_kds_limits",
      "content": "{\"status\": \"success\", \"result\": \"KDS 41 31 00 건축강구조설계기준 표 4.1-1: SM355 강재의 휨재 플랜지 폭두께비(b/t) 제한값 - 조밀단면 한계: 0.38*sqrt(E/Fy) = 9.1, 비조밀단면 한계: 1.0*sqrt(E/Fy) = 24.0 (단, 탄성계수 E=210,000MPa, 항복강도 Fy=355MPa 기준 적용)\"}"
    },
    {
      "role": "assistant",
      "content": "<thought>\n1. 외부 Tool을 통해 KDS 41 31 00의 정확한 수치 정보를 수신함.\n2. SM355 강재 기준, 플랜지의 조밀단면 한계 폭두께비는 9.1이며 비조밀단면 한계는 24.0임을 확인.\n3. 수신된 데이터에 기반하여 환각 없이 사용자에게 설계 가이드라인을 제공함.\n</thought>\n조회된 국가건설기준(KDS 41 31 00 건축강구조설계기준)에 따른 SM355 강재 휨재 플랜지의 폭두께비($b/t$) 제한값 기준은 다음과 같다.\n\n1. 조밀단면(Compact Section) 한계값: 9.1\n2. 비조밀단면(Non-compact Section) 한계값: 24.0\n\n설계하시는 H형강 보 부재의 플랜지 폭두께비 산정 값이 9.1 이하일 경우 조밀단면으로 분류되어 부재의 소성 휨모멘트 성능을 온전히 발휘할 수 있으나, 9.1을 초과하고 24.0 이하일 경우 비조밀단면으로 분류되어 국부좌굴을 고려한 휨강도 감소 처리를 해야 한다."
    }
  ]
}

2026년 6월 14일 일요일

LLM 슈퍼메모리 소개 및 사용기

이 글은 LLM 슈퍼메모리 소개 및 사용기을 나눔한다. 

대형 언어 모델을 활용할 때 발생하는 대표적인 한계 중 하나는 일회성 대화에 그치거나 수많은 정보 속에서 사용자의 핵심 데이터와 맥락을 지속적으로 기억하지 못한다는 점이다. 슈퍼메모리는 이러한 컨텍스트 단절 문제를 해결하기 위해 개발된 오픈소스 기반의 AI 기억 저장소 프로젝트이다. 사용자가 웹에서 수집한 북마크, 문서, 메모 등 다양한 정보를 수집하고 이를 LLM이 손쉽게 참조할 수 있는 개인화 지식 기반으로 변환한다.

슈퍼메모리의 핵심 구조와 주요 특징

슈퍼메모리는 단순한 메모 작성 도구가 아니라 사용자의 데이터를 검색 가능하고 활용하기 쉬운 형태로 관리하는 통합 메모리 엔진이다.

첫째, 다양한 데이터 소스의 통합이다. 웹 브라우저 확장 프로그램, 북마크, PDF 문서, 텍스트 메모 등을 한곳으로 수집할 수 있다.

둘째, 지능형 데이터 처리와 벡터 검색이다. 수집된 정보는 백그라운드에서 임베딩 연산을 거쳐 벡터 데이터베이스에 저장된다. 이를 통해 사용자가 모호하게 질문하더라도 관련된 지식을 정확하게 찾아낸다.

셋째, LLM과의 통합 연동이다. 축적된 정보를 바탕으로 언어 모델과 질의응답을 진행할 수 있다. 사용자가 과거에 저장해 둔 수많은 아티클이나 아이디어 노트를 일일이 찾지 않아도 AI가 맥락을 이해하고 필요한 정보만 요약하여 답변한다.

넷째, 프라이버시 중심 설계와 데이터 제어권이다. 오픈소스 프로젝트 특성상 사용자가 직접 인프라를 구축할 수 있으며, 본인의 소중한 데이터가 외부로 유출될 위험을 줄일 수 있다.

실제 사용 경험 및 유용성

슈퍼메모리를 도입하여 사용해 본 결과, 기존의 지식 관리 도구와 비교했을 때 몇 가지 명확한 차이점이 존재했다.

기존의 노션이나 노트 앱은 저장된 노트를 찾기 위해 키워드를 검색하거나 폴더 구조를 직접 정리해야 하는 번거로움이 있었다. 반면 슈퍼메모리는 분류 작업에 시간을 쓸 필요가 없다. 대충 모아둔 정보라도 질문을 던지면 AI가 관련 내용을 알아서 조합하여 답변해 준다.

특히 리서치 업무나 공부를 진행할 때 유용하다. 특정 주제에 대한 자료를 웹 서핑하며 저장해 두면, 이후 LLM과 대화하면서 해당 자료들에 기반한 답변을 즉시 얻을 수 있다. 이는 단순 환각 현상을 줄이고 사용자가 직접 수집한 검증된 데이터에 기반한 고품질 응답을 얻게 해 준다.

마무리

슈퍼메모리는 LLM의 장기 기억장치 역할을 수행함으로써 AI 활용성을 한 단계 올려주는 도구이다. 비정형화된 대량의 개인 데이터를 유용한 지식으로 변환하여 사용자의 지적 생산성을 대폭 향상시킨다. 개인용 지식 보조 도구나 커스텀 AI 에이전트를 구축하고자 하는 개발자와 연구자에게 매우 매력적인 선택지이다.


레퍼런스