Community연구 & 데이터 분석github.com

kpp-coding-skill

Kaiwu PyTorch Plugin (KPP) 설치, 구축 및 훈련을 통해 PyTorch 에너지 모델을 다루고 Kaiwu 샘플러와 연동합니다. RBM/BM, DBN, 에너지 모델 사전을 사용하는 QVAE, 에너지 기반 이산 시퀀스 생성 QDiffusion, PyTorch 모델을 위한 MAIFS 특징 선택, 또는 kaiwu.torch_plugin 디버깅에 적합합니다.

kpp-coding-skill란 무엇인가요?

이 스킬은 개발자가 Kaiwu PyTorch Plugin (KPP)을 사용하여 에너지 기반 모델(EBM)을 설치, 구성 및 훈련하고 Kaiwu 샘플러와 통합할 수 있도록 설계되었습니다. 주요 구성 요소로는 RestrictedBoltzmannMachine (RBM), BoltzmannMachine (BM), UnsupervisedDBN, QVAE, QDiffusion 및 FeatureSelectionWrapper (MAIFS)가 포함됩니다. 이 스킬은 일반적인 신경망이나 회귀 작업을 자동으로 에너지 모델 작업으로 변환하지 않으며, PyTorch 모델에 연결되지 않은 순수 QUBO/Ising 조합 최적화는 다루지 않습니다. 자동 환경 확인, 종속성 설치, 가져오기 확인 및 훈련 검증을 제공하며, SDK SA/CIM 샘플러와의 통합을 지원합니다. 주요 사용 사례에는 이진 데이터 모델링, 특징 학습, 재구성, 조건부 샘플링 및 특징 선택이 포함됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qboson/kpp-coding-skill/tree/main

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

KPP 에너지 모델과 샘플링

PyTorch 모델과 Kaiwu 샘플러의 통합을 담당합니다. 모델 파라미터, 목적 함수 및 최적화기는 PyTorch에 남겨둡니다. 호환 가능한 샘플러를 통해 Kaiwu 솔버 또는 기존 작업의 샘플링 파이프라인에 연결합니다. 일반적인 머신러닝 작업을 자동으로 에너지 모델 작업으로 변경하지 마십시오.

구성 요소 선택

먼저 입력, 출력 및 모델링해야 할 관계를 기반으로 구조를 선택하고, 선택한 구성 요소가 작업 요구 사항을 어떻게 충족하는지 설명합니다. 사용자가 구조를 지정한 경우 지정된 대로 완료합니다. 직접 선택하는 경우 작업에 관측 변수 간의 직접적인 관계, 숨겨진 요인, 계층적 표현, 잠재 변수 재구성, 컨텍스트 생성 또는 특징 선택이 필요한지 판단한 다음 해당 구성 요소를 선택합니다. 모델 크기는 기본 우선 순위가 아닙니다. 먼저 기능과 효과가 일치하는지 확인한 다음 요구 사항을 충족하는 솔루션 간에 훈련 및 샘플링 비용을 비교합니다.

문제에 필요한 기능구성 요소선택 근거
숨겨진 요인으로 관측 패턴을 설명하거나 가시/은닉 이분 구조 학습RestrictedBoltzmannMachine은닉 표현이 작업에 필요한 분포 학습에 참여함. 이진 입력만으로 RBM 사용 결정 불가
이진 노드 간의 쌍별 상호 작용을 직접 모델링하거나 일부 노드를 고정한 후 샘플링BoltzmannMachine노드와 그 상호 작용이 문제 변수에 해당함. 작업 지표로 필요한 관계를 표현하기에 충분한지 확인
다중 RBM 레이어를 통한 계층적 특징 학습UnsupervisedDBN작업에 레이어별 학습 표현이 필요하거나 사용자가 명시적으로 RBM 스택 요구
인코딩, 재구성 및 샘플링 가능한 에너지 모델 잠재 변수 사전QVAE재구성과 잠재 변수 사전이 모두 작업에 기여함. 일반 오토인코더를 QVAE로 변경하지 않음
컨텍스트 관련 이산 후보 생성 및 에너지 가이드QDiffusionproposal이 필요한 컨텍스트를 제공하고 energy가 작업 관련 가이드를 수행
기존 PyTorch 모델 입력에서 특징 부분 집합 선택FeatureSelectionWrapper작업에 입력 특징 선택이 필요하며, 주기적으로 업데이트되는 0/1 마스크 사용

이진 데이터, 레이블 수 또는 예제 순서만으로는 선택 유형을 결정할 수 없습니다. 작업에서 요구하는 연관, 재구성, 완성 또는 예측 결과를 사용하여 선택을 검증합니다. 가져오기 성공 또는 출력 형태 일치만으로는 적합성을 나타내지 않습니다. 작업에 고차 관계나 컨텍스트가 필요한 경우 쌍별 통계만으로 모델이 충분하다고 판단하지 마십시오. BM과 RBM의 서로 다른 훈련 구조는 모델 패러다임을 참조하십시오. 현재 작업 관련 부분만 읽으십시오.

이는 동일한 KPP 패키지의 다른 구성 요소이므로 6개의 플러그인을 별도로 설치할 필요가 없습니다. 특징 선택은 내부적으로 QUBO를 풀지만 PyTorch 모델 훈련에 기여하므로 이 Skill에 속합니다. 순수 입지 선정, 스케줄링, Max-Cut 등 모델에 의존하지 않고 직접 최적 결정을 찾는 작업은 Kaiwu SDK Skill을 사용하십시오. 동일한 작업에 조합 최적화와 에너지 훈련이 모두 포함된 경우 두 Skill을 별도로 로드하고 각각의 인터프리터를 사용할 수 있습니다.

애플리케이션 작업의 최소 폐쇄 루프

  1. 대표 데이터로 선택한 구조의 작업 효과를 확인하고 실제 훈련 및 생성의 규모와 소요 시간을 기록하여 정식 실행을 계획합니다. 총 예산에 모델 저장, 새 프로세스 로드, 생성 및 보고서 확인 시간을 포함시킵니다.
  2. 가능한 한 빨리 작업이 요구하는 완전한 진입점을 만듭니다. 각 검증 후 현재 가장 효과적이고 재사용 가능한 모델, 구성 및 보고서를 저장합니다. 후속 실험은 새 출력 디렉토리를 사용하며, 전달 디렉토리에는 항상 실행 가능한 버전을 유지합니다.
  3. 배치 생성은 실제 행 수를 누적합니다. 배치를 추가할 때 해당 배치의 행 수를 누적하고 요청된 수량에 도달하면 자릅니다. 먼저 소규모 요청으로 수량, 너비 및 값을 확인합니다. 배치 수는 샘플 수와 같지 않습니다.
  4. 원본 레코드 직접 복사, 모델 샘플링의 자연적 중복 및 인위적 필터링을 별도로 확인합니다. 공통 조합은 독립 생성에서 중복될 수 있습니다. 중복 레코드를 필터링하거나 강제로 고유하게 만들면 분포가 변경되므로 사용 후 비율 및 연관성과 같은 비즈니스 지표를 다시 확인합니다.
  5. 작업의 공개된 비즈니스 요구 사항에 따라 검증합니다. 모델을 저장한 후 새 프로세스에서 전달 모델과 요청 입력만으로 다시 생성하고 동일한 실행의 품질과 소요 시간을 보고합니다. 이번 목표에 도달하면 전달을 완료합니다. 도달하지 못한 경우 현재 결과를 보존하고 정직하게 설명하며, 위 확인을 완료할 수 있는 남은 예산 내에서 계속 시도합니다.

확인, 자동 설치, 검증

  1. 사용자가 지정했거나 프로젝트에 있는 기존 인터프리터를 재사용하고 Python, kaiwu-torch-plugin, kaiwu, torch의 버전을 확인합니다. 동일한 환경에서 python -m pip check를 한 번 실행한 다음, Skill 디렉토리 내 scripts/verify_kpp.py의 --imports-only 모드를 실행합니다. 이번 확인 결과가 이미 있으면 직접 재사용하고 작업을 진행합니다. 환경을 추가로 스캔하거나 일반 훈련을 시험 실행하지 않습니다.
  2. 패키지가 누락된 경우에만 설치 계획을 확인하고 설치합니다. 종속성 충돌, 오프라인 패키지, Python 버전 또는 wheel 지원 문제가 있는 경우 설치 설명에 따라 처리하고 실제 메타데이터를 기반으로 호환 환경을 선택합니다.
  3. 작업에서 제공하는 호환 샘플러를 재사용합니다. SDK SA/CIM을 선택한 경우에만 해당 라이선스를 확인합니다. SDK 라이선스 부재를 모든 로컬 샘플러를 훈련할 수 없는 것으로 간주하지 않습니다. 라이선스 초기화 및 비대화형 제한은 설치 설명을 참조하십시오.
  4. 실제 작업 프로그램으로 선택한 모델을 검증합니다. 작업 프로그램이 없고 SDK 샘플러 훈련을 확인해야 하는 경우에만 검증 스크립트의 기본 모드를 실행합니다. KPP_IMPORT_OK는 가져오기만 증명합니다. KPP_TRAIN_OK는 스크립트가 다루는 소규모 훈련만 증명합니다.

확인 로그, 임시 파일 및 검증 사본은 작업 디렉토리에 남겨둡니다. 클라우드 CIM은 작업에 명시적으로 필요하고 할당량 라이선스가 있는 경우에만 사용합니다. Kaiwu CIM을 호출할 때 task_name은 kpp-skill로 시작해야 하며, 백엔드 통계를 용이하게 합니다. 예: kpp-skill-rbm-train. 기존 작업 이름에 이 접두사가 없으면 앞에 kpp-skill-을 추가합니다.

훈련 및 생성 계약

BM 및 RBM의 공개 가져오기 경로:

from kaiwu.torch_plugin import BoltzmannMachine, RestrictedBoltzmannMachine

SDK SA를 선택하는 경우 SimulatedAnnealingOptimizer는 kaiwu.classical에서 가져옵니다. BM 생성은 BoltzmannMachine(num_nodes, quadratic_coef=None, linear_bias=None, device=None)를 사용합니다. RBM 생성은 RestrictedBoltzmannMachine(num_visible, num_hidden, quadratic_coef=None, linear_bias=None, device=None)를 사용합니다. 학습률, 가중치 감쇠 등의 설정은 PyTorch 최적화기에 맡기고, 모델 생성자에 learning_rate, k, batch_size 또는 기타 라이브러리 훈련 파라미터를 전달하지 마십시오.

  • RBM: get_hidden(batch, bernoulli=True) 및 sample(sampler)는 가시+은닉 결합 상태를 반환하며, 너비는 num_visible + num_hidden입니다. 양상 배치와 음상 배치의 행 수는 다를 수 있으며, 각각 평균을 냅니다. 동일한 샘플 수를 강제로 맞추지 마십시오. objective(positive, negative)는 스칼라를 반환합니다. 직접 positive = model.get_hidden(batch, bernoulli=True)를 작성하고, 반환 값을 언패킹하거나 가시 레이어를 다시 연결하지 마십시오. get_hidden은 기본적으로 bernoulli=False이며, 은닉 부분은 확률입니다. RBM 양상 기대값에 적합하며, 이진 결합 샘플을 전달할 때만 bernoulli=True가 필요합니다. 확률 상태를 이미 샘플링된 이진 샘플로 간주하지 마십시오. 배치 풀 크기는 실제 샘플러 구성에 따라 달라집니다. SDK SA는 SimulatedAnnealingOptimizer(size_limit=...)를 사용합니다. set_config를 임의로 만들거나 sample에 정의되지 않은 num_solutions 파라미터를 추가하지 마십시오.
  • SDK 샘플링: sampler.solve는 꼬리 참조 스핀이 포함된 ±1 2차원 배열을 반환합니다. KPP의 sample은 내부적으로 참조 스핀 정규화, 꼬리 열 제거 및 0/1 부동 소수점 텐서 변환을 수행합니다. sample 반환 값에 대해 열을 다시 제거하거나 변환하지 마십시오. 사용자가 고정된 테스트 해를 제공하는 경우, 각 solve는 전체 해 집합을 그대로 반환합니다. 각 해를 다른 조건에 할당하거나 첫 번째 행을 반복하여 샘플 수를 맞추지 마십시오. 조건부 샘플링은 고정 열과 각 해 변환 후의 자유 열을 동시에 확인해야 하며, 형태만 확인하지 마십시오.
  • 훈련 순서: 각 단계 optimizer.zero_grad() → 양음상 → objective → backward() → step(). objective와 backward()는 torch.no_grad() 안에 넣지 마십시오. sample()은 그래디언트가 없는 샘플 텐서를 반환하며, 그래디언트는 objective가 에너지를 재계산하여 발생합니다. sample()이 no_grad 내에 있는지 여부는 훈련에 영향을 미치지 않습니다. 모델, 데이터, 수동 텐서는 동일한 device를 유지합니다. 양음상 너비, 음상의 이진성, 손실/그래디언트의 유한성, 파라미터의 실제 업데이트를 확인합니다.
  • BM / DBN: 조건부 샘플링은 condition_sample(sampler, s_visible)을 사용하며, 이는 항상 처음 s_visible.shape[1]개의 노드를 고정합니다. 각 조건 행에 대해 솔버를 한 번 호출합니다. 각 행의 알려진 위치가 다른 경우 행별로 재정렬합니다: "알려진 것을 앞으로" 배치하여 linear_bias 및 대칭화된 quadratic_coef를 치환하고, 치환된 파라미터로 임시 BoltzmannMachine을 생성하여 condition_sample을 호출한 다음, 열을 원래 순서로 역치환합니다. DBN은 사용 전에 create_rbm_layer(input_dim)을 호출하고, 훈련 완료 후 mark_as_trained()를 호출한 다음 forward/transform을 수행합니다.
  • QVAE: encoder/decoder/bm/sampler를 주입하여 생성하거나, 4개의 _create_* 팩토리 메서드를 구현하는 서브클래스를 만들 수 있습니다. config에는 num_latent_units / loss_type / dist_beta / kl_beta / weight_decay가 포함됩니다. 베르누이 평균 보정은 선택적 설정입니다. 사용 시 생성 후 set_dataset_mean과 set_train_bias를 각각 호출하며, 평균을 설정하면 편향이 자동으로 업데이트된다고 가정하지 마십시오. 평균은 스칼라 또는 차원별 텐서일 수 있으며, 현재 인터페이스를 따릅니다. encoder+decoder와 BM은 두 개의 최적화기를 사용하며, BM 업데이트는 bm_loss(q.detach(), weight_decay)를 사용합니다. 모델 패러다임을 참조하십시오. 최종 평가는 훈련 시의 입력 평균 보정과 출력 편향을 유지합니다. q는 encoder logits이며, (q > 0).float()은 경성 판정이고, 사후 평균이 아닙니다. 원시 재구성과 평균의 차이는 참조 문서의 QVAE 단락을 참조하십시오. 무작위 재구성, 디코딩된 실제 사후 평균 모두 가능합니다. 실제 최종 logits에서 지표를 계산하고 저장하며, 사용된 방식을 설명합니다. 소량의 훈련 품질을 인터페이스 통과 조건으로 간주하지 마십시오.
  • QDiffusion: proposal 입력은 [B, L], 출력은 [B, L, V] logits입니다. 컨텍스트 완성이 필요한 경우, 셀프 어텐션 등과 같은 구조를 사용하여 누락된 위치가 다른 위치를 읽도록 합니다. 위치별 embedding + MLP는 위치 선호도만 학습할 수 있으며, 정확도가 높더라도 컨텍스트 완성을 충족하지 않습니다. EnergyModel 서브클래스는 score_conditioned(noisy, candidate, attention_mask)를 구현하여 [B, 1]을 출력합니다. SequenceTokenSpec은 kaiwu.torch_plugin.qdiffusion에서 가져오며, 최상위에서 내보내지지 않습니다. "어휘 크기 V"만 주어진 경우 출력 너비를 V로 유지합니다. 특수 id는 해당 어휘 내에 있어야 하며 내용 token과 분리되어야 합니다. V를 내용 어휘로 해석하고 V+4로 확장하지 마십시오. 내용 id가 V를 가득 채우거나 특수 id 매핑이 불분명한 경우, 솔루션에 확인해야 할 매핑을 나열합니다. 확인 전에 확장된 출력 너비를 사용하지 말고, 사용자의 기존 내용 범주를 축소하지 마십시오. proposal을 처음부터 훈련하는 경우 먼저 독립적인 완성 훈련을 완료한 다음, proposal을 동결하고 energy를 훈련합니다. 기본 objective는 내부적으로 proposal 그래디언트를 차단하므로, proposal 사전 훈련에 사용할 수 없습니다. 훈련은 generator.objective({"targets": batch})를 사용하고, 생성은 generator.generate(init, max_steps=...)를 사용합니다. freeze_proposal=True인 경우 energy 측만 최적화합니다. 전체 통합 조건은 모델 패러다임을 참조하십시오.
  • 특징 선택 (MAIFS): from kaiwu.torch_plugin import FeatureSelectionWrapper, QuadraticLinearSolver. 생성 시그니처는 FeatureSelectionWrapper(model, feature_dim, lambda_reg=0.0, cardinality_k=None, min_selected_features=None, max_selected_features=None, solver="local_search", mask_update_epochs=None, input_feature_axis=-1, solver_kwargs=None)입니다. 훈련은 sel.fit_weights(loader, loss_fn, optimizer, train_epochs)를 사용합니다: loader는 (x, y)를 생성하고, loss_fn은 스칼라를 반환하며, optimizer는 sel.model.parameters()에 적용됩니다. 마스크는 mask_update_epochs epoch마다 한 번씩 새로 고쳐집니다. None인 경우 수동으로 update_mask(loader, loss_fn, hessian_mode="full"|"diagonal", max_samples=1000)를 호출할 때만 새로 고쳐집니다. 결과는 selected_indices(), num_selected(), get_support()로 읽습니다. solver="local_search"는 라이선스가 필요 없습니다. "sa", "kaiwu_cim"은 Kaiwu SDK를 사용하며 라이선스가 필요합니다. update_mask의 시간은 주로 QUBO 해결과 수량 투영에 소요되며, 특징 수에 따라 빠르게 증가합니다 (로컬에서 400개 특징의 경우 약 13–15초, 미분 계산은 1초 미만). hessian_mode와 max_samples는 미분 부분에만 영향을 미치므로, 실제 특징 수에 따라 시간을 할애하십시오. QuadraticLinearSolver().solve(Q, b)는 QUBO 항을 보조 스핀이 하나 있는 Ising 행렬로 변환할 뿐, 해결을 담당하지 않습니다.

전달 및 승인

새 작업은 완전한 스크립트를 전달하고, 데이터, import, 구성, 훈련 루프 및 결과 출력을 보완합니다. 기존 코드를 수정하는 경우 작업에 필요한 부분만 수정합니다. 솔루션이나 환경 기록만 필요한 경우, 실제로 지정된 문서를 저장합니다. 여러 라운드의 요구 사항을 보완한 후 전달을 업데이트하고 파일이 기록되었는지 확인합니다. 참조 문서의 QVAE/QDiffusion 조각은 구조 예시이며 컨텍스트 변수를 포함하지만, 직접 실행 가능한 스크립트로 간주할 수 없습니다. API가 확실하지 않은 경우 현재 kaiwu.torch_plugin.__file__을 찾아 실제 시그니처와 소스 코드를 확인합니다. 실제 인터프리터, 종속성 버전 및 실행 결과를 보고합니다. RBM 통과가 다른 모델, GPU 또는 클라우드 CIM의 통과를 의미하지는 않습니다.

관련 스킬