SpikingJelly: 스파이킹 신경망(SNN)을 위한 PyTorch 기반 프레임워크
요약
SpikingJelly는 스파이킹 신경망(SNN)을 위한 PyTorch 기반의 네이티브 프레임워크입니다. 초보자 친화적인 API를 제공하며, ANN2SNN 변환과 대규모 SNN 학습 및 추론을 지원합니다. 메모리 효율성과 분산 실행 기능을 갖추어 하드웨어 배포까지 염두에 둔 개발 환경을 제공합니다.
핵심 포인트
- PyTorch 기반의 SNN 전용 프레임워크입니다.
- 초보자도 쉽게 사용할 수 있는 친화적인 API를 제공합니다.
- ANN2SNN 변환 및 대규모 시스템 학습/추론이 가능합니다.
- 메모리 효율적이며 분산 실행과 하드웨어 배포를 지원합니다.
SpikingJelly
중국어 | English

목차 (Contents)
- SpikingJelly를 사용하는 이유
- 설치 (Installation)
- 빠른 시작 (Quick Start)
- 핵심 기능 (Core Capabilities)
- 프로젝트 상태 및 버전 노트 (Project Status and Version Notes)
- 라이선스 (License)
- 감사 (Acknowledgement)
- 기여 (Contributing)
- 인용 (Citation)
SpikingJelly를 사용하는 이유 (Why SpikingJelly)
SpikingJelly는 스파이킹 신경망(SNNs)을 위한 PyTorch 네이티브 프레임워크로, 대규모 SNN 학습 및 추론을 지원합니다.
- 초보자 친화적인 API
- ANN2SNN 변환
- 이벤트 기반 데이터셋
- 자동 연산자 실행: Torch, Triton 및 선택적 네이티브 CUDA
- 메모리 효율적인 학습, 분산 실행, 정밀도 제어
- 하드웨어 배포 및 프레임워크 교환
설치 (Installation)
활성화된 가상 환경에서 uv를 사용하세요: Python >=3.11, Torch >=2.6.
먼저 PyTorch를 설치합니다.
| 설치 | 명령어 |
|---|---|
| PyPI 릴리스 | uv pip install spikingjelly |
| ... | |
| Native CUDA (툴체인 필요; 해당 V2 PyPI 릴리스 이후 사용 가능): |
SJ_BUILD_NATIVE_CUDA=1 uv pip install \
--no-build-isolation --no-binary spikingjelly \
--reinstall-package spikingjelly --no-cache
## 빠른 시작
SNN을 정의하는 방법은 다른 PyTorch 모델을 정의하는 방식과 동일합니다:
```python
from torch import nn
from spikingjelly.activation_based import layer, neuron, surrogate
...
다음 단계:
핵심 기능
| 영역 | SpikingJelly가 제공하는 것 |
|---|---|
| SNN 모델링 | 활성화 기반 SNN 구성 요소: 스파이킹 뉴런, 유사 기울기(surrogate gradients), 상태 저장 및 비상태 모듈. 사전 정의된 SNN 모델. |
| ... |
연산자 실행
뉴런 실행은 텐서 장치와 실행 경로로부터 자동으로 선택됩니다:
CPU는 Torch를 사용하고; CUDA eager는 호환 가능한 네이티브 CUDA를 선호하며, Inductor 확장은 Triton을 선호합니다. CUDA Graph는 사전 캡처된 선택을 유지합니다. 공개적인 뉴런 백엔드 인자나 CuPy 의존성이 필요하지 않습니다. 저정밀도 상태 프로파일은 Torch 참조 실행을 사용할 수 있습니다.
순수 Python wheel에는 Torch 참조 및 선택적 Triton 실행이 포함됩니다.
선택적 네이티브 뉴런, 융합된 IF/LIF-Linear 및 패킹/희소 투영 빌드는 설치에서 설명합니다. 누락된 확장은 투영에 대해 Torch 참조를 사용하며; 융합된 중간 스파이크 없는 성능은 확장 기능이 필요합니다. 폐지된 SpikeLinear/SpikeConv 대신 일반적인 Linear/Conv와 memopt을 사용하십시오.
대규모 SNN 시스템
대규모 SNN 시스템의 경우, SpikingJelly는 다음 기능을 제공합니다:
- 스파이크 압축(
memopt)을 이용한 메모리 효율적 훈련 - 다중 GPU 워크로드를 위한 실험적 분산 실행 기능
- 대규모 훈련 및 추론을 위한 정밀도 정책 도구
- 스파이킹 트랜스포머 구성 요소
데이터셋
SpikingJelly는 다음 이벤트 기반 및 뉴로모픽 데이터셋을 포함합니다:
- ASL-DVS
- Bullying10K
- CIFAR10-DVS
- DVS-Lip
- DVS128 Gesture
- ES-ImageNet
- HARDVS
- N-Caltech101
- N-MNIST
- Nav Gesture
- SHD
- SSC
- Speech Commands
각 데이터셋은 원시 이벤트 접근(raw event access)과 프레임 표현(frame representations)을 모두 지원합니다. 전체 워크플로우는 neuromorphic datasets tutorial를 참조하십시오.
상호 교환 및 배포 (Interchange and Deployment)
SpikingJelly 모델을 뉴로모픽 하드웨어 또는 다른 프레임워크로 내보내기(Export)하는 방법:
프로젝트 상태 및 버전 노트 (Project Status and Version Notes)
개발 / 릴리스 정책:
SpikingJelly V2부터는 릴리스 버전이 PEP 440 호환의 SemVer 스타일인 MAJOR.MINOR.PATCH 의미론을 따릅니다. MAJOR는 호환성 세대(compatibility generations)를, MINOR는 하위 호환 기능 추가(backward-compatible functionality)를, 그리고 PATCH는 버그 수정(fixes bugs)을 나타냅니다. V2 개발 릴리스의 경우, 예를 들어 2.0.0.dev0, 2.0.0a1, 2.0.0b1, 2.0.0rc1과 같은 Python 패키지 프리릴리즈 표기법이 사용됩니다.
V2 릴리스 변경 로그는 CHANGELOG.md를 참조하십시오.
<details> <summary>호환성, 마이그레이션 및 이전 문서</summary>- V2 이전에는 SpikingJelly가 레거시
0.0.0.0.X방식을 사용했습니다: 홀수X는 GitHub / OpenI의 개발 버전을 추적했고, 짝수X는 PyPI에 게시된 안정화 릴리스를 추적했습니다. - 프로젝트가 V2 이전 릴리스에 머물러야 하는 경우,
spikingjelly<2와 같은 상한(upper bound)으로 종속성을 고정하십시오. 0.0.0.0.14부터는clock_driven및event_driven을 포함하는 모듈의 이름이 변경되었습니다. 구 버전에서 마이그레이션하기를 참조하십시오.- 기본 문서는 최신 개발 버전을 가리킵니다.
- 이전 릴리스에 의존하는 경우, bugs.md를 확인하고 일치하는 문서 버전으로 전환하십시오.
역사적 문서:
</details>라이선스
SpikingJelly의 프로젝트 라이선스는 Apache-2.0입니다. 타사 기여 및 라이선스 조건은 LICENSES/NOTICE에서 확인할 수 있습니다. 범위 및 과거 라이선스는 라이선스 가이드를 참고하십시오.
감사의 글 (Acknowledgement)
유지보수자 (Maintainers)
현재 유지보수자 (2024년 7월 이후):
이전 핵심 유지보수자 (2024년 7월 이전):
기여자 (Contributors)
전체 기여 목록은 기여자 페이지에서 확인할 수 있습니다.
<a href="https://github.com/fangwei123456/spikingjelly/graphs/contributors"> <img src="https://contrib.rocks/image?repo=fangwei123456/spikingjelly" alt="기여자" /> </a기관 (Institutes)
SpikingJelly의 주요 개발 기관은 베이징대학교 디지털 미디어 연구소 멀티미디어 학습 그룹과 펑청 실험실입니다.
<p align="center"> <img src="https://raw.githubusercontent.com/fangwei123456/spikingjelly/HEAD/docs/source/_static/logo/pku.png" alt="PKU" width="160" /> <img src="https://raw.githubusercontent.com/fangwei123456/spikingjelly/HEAD/docs/source/_static/logo/pcl.png" alt="PCL" width="160" /> </p>커뮤니티 및 관련 링크 (Community and related links)
- 문서화 (Documentation)
- 기여 가이드 (Contributing Guide)
- 이슈 및 개발 논의 (Issues and development discussion)
- OpenI 미러
- 중국어 커뮤니티 주피터 튜토리얼
기여 (Contributing)
이슈(issues), 풀 리퀘스트(pull requests), 문서 개선, 번역을 환영합니다.
인용 (Citation)
SpikingJelly를 사용한 논문은 문서 페이지에 나열되어 있습니다. 이 저장소의 진실 공급원(source of truth)은 publications.json입니다.
작업에서 SpikingJelly를 사용했다면, 다음을 인용해 주십시오:
@article{
doi:10.1126/sciadv.adi1480,
author = {Wei Fang and Yanqi Chen and Jianhao Ding and Zhaofei Yu and Timothee Masquelier and Ding Chen and Liwei Huang and Huihui Zhou and Guoqi Li and Yonghong Tian},
...
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기