sciBASIC#: Scientific Computing을 위한 Microsoft VisualBasic
GitHub release
AppVeyor build
License GPLv3
Gitter
과학 데이터 컴퓨팅, 딥러닝 (deep learning), LLM 추론 (inference), GPU 가속화 (GPU acceleration), 시각화 및 명령줄 데이터 사이언스 애플리케이션을 위한 VisualBasic(.NET) 언어 커널 및 런타임 — Windows, Linux 및 macOS에서 .NET (net10.0)으로 실행됩니다. 일반 .vb 스크립트로 분석 코드를 작성하고 내장된 vbs 스크립트 엔진으로 직접 실행할 수 있습니다.
목차
소개
**sciBASIC#**은 Microsoft VisualBasic.NET으로 완전히 작성된 크로스 플랫폼 프레임워크로, BASIC 언어의 생산성을 과학 컴퓨팅에 가져옵니다. 이는 재사용 가능한 대규모의 응집력 있는 라이브러리 세트(nuget.slnx에서 100개 이상의 프로젝트)를 번들로 제공하며, 이들이 함께 Windows, Linux 및 macOS에서 현대적인 .NET (net10.0)을 사용하여 데이터 사이언스 명령줄 도구 구축의 기반을 형성합니다.
런타임은 협력하는 계층들로 구성되어 있습니다:
| Layer | Source root | Purpose |
|---|
| Core runtime | Microsoft.VisualBasic.Core/ | 확장된 VB 언어 구문, LINQ 스타일 컬렉션, CLI 애플리케이션 프레임워크, NumericTable 통합 데이터 모델, 직렬화, 네트워킹 및 SIMD 가속 수학. |
| ... | | |
이 설계 철학은 CLI 우선 / 스크립트 우선입니다. 드래그 앤 드롭 컨트롤 대신, sciBASIC#는 파일을 읽고, 계산하고, 그림이나 표를 출력하는 헤드리스(headless), 스크립터블(scriptable), 재현 가능한 데이터 과학 프로그램을 강조합니다. 이는 과학 논문에 실리는 종류의 아티팩트입니다.
sciBASIC#을 사용한 3D 그래픽 예제
새로운 기능 (What's New)
최근 릴리스에서 프레임워크가 상당히 확장되었습니다:
- 딥러닝 모델 동물원 (
Data_science/MachineLearning/) — 순수 관리 코드(pure managed code)로 구현된 최신 신경망 아키텍처: CNN, RNN, Transformer, ANN ( DeepLearning 패키지 내), 그리고 GNN (그래프 신경망: GCN / GAT / 시간 그래프), LNN (ODE-solver 셀을 사용한 액체 신경망), SNN (스파이킹 신경망: LIF 뉴런, 서로게이트 기울기(surrogate gradients), STDP), VAE, RBM, DBN 및 Deep-Q-Network 전용 패키지.
- LLM 엔진 (
llm/) — Transformer 아키텍처를 기반으로 구축된 디코더 온리 언어 모델: DeepSeek 스타일의 MoE 라우팅, KV 캐시 증분 디코딩, RoPE, RMSNorm, SwiGLU, GQA/MQA, 스키마 제약 디코딩을 사용한 함수 호출(function calling) 및 전체 에이전트 루프.
NumericTable 통합 데이터 모델 (Microsoft.VisualBasic.Core/src/Data/NumericTable.vb) — 프레임워크의 모든 머신러닝 알고리즘에서 공유되는 하나의 테이블 모델(행 이름 + 특성 열 + 레이블 열)로, 체인 스타일 데이터 과학 파이프라인을 가능하게 합니다: NumericTableIO.ReadCsv(...).kmeans(3).pca(2).ScoreTable() …
SIMD 수학 가속 (SIMD math acceleration) (Microsoft.VisualBasic.Core/src/Math/SIMD/) — 요소별(element-wise) 수학, 행렬 커널 및 축소 연산에 대한 하드웨어 벡터화된 산술(SSE2/AVX/ARM Advanced SIMD)을 제공하며, 스크립트 엔진의 자동 벡터화에서 사용되는 Vec* 연산자 어휘를 포함합니다.**
5. CUDA GPU 프레임워크 (cuda/) — ILCuda(CUDA 드라이버 API의 P/Invoke + NVRTC 런타임 컴파일, 제3자 종속성 없음, 그리고 .NET 메서드를 GPU 커널로 컴파일하는 IL → CUDA 변환기)와 ILCudaTensor(double-정밀도 GPU 텐서 런타임으로, CudaTensor가 전체 Tensor/nn 연산군을 투명하게 GPU로 전환합니다).)
6. VBS 스크립트 엔진 (vs_solutions/VBS/) — VB.NET 스크립트를 직접 실행: 프로젝트, 컴파일 단계, 배포 과정이 필요 없습니다. 이 엔진은 Roslyn을 통해 파싱하고, 재구성하며, 메모리 내에서 컴파일하고 어셈블리를 실행합니다. 또한 스크립팅 전용 구문 확장(벡터화된 배열 수학, let 동적 타이핑, 튜플 구조 분해, @ 배열 투영, dll/스크립트/NuGet 패키지 #include)을 추가합니다.
기능
-
확장된 VisualBasic 구문: Value(Of T) 인라인 할당, + 추가 연산자와 풍부한 indexer를 갖춘 List(Of T), LINQ 헬퍼(Sequence, Iterates, which, sentinel), 그리고 Unix-shell 스타일의 헬퍼(UnixBash.ls, cat).
-
명령줄 애플리케이션 프레임워크: 속성 기반(<ExportAPI>, <Usage>) CLI, 자동 도움말 생성 기능, 외부 명령줄 도구를 호스팅하는 InteropService.
-
VB.NET 스크립트 엔진 (vbs): 최상위 레벨(top-level) 문장, ?"--arg" 매개변수, #include (어셈블리 / 스크립트 / NuGet), 마법 메서드(Here(), ScriptDir()), 자동 벡터화된 수치 배열 연산, GNU R 스타일의 print 데이터 검사, 디버깅된 스크립트를 실제 .vbproj 프로젝트로 승격시키는 make-project.
-
통합 테이블 모델 — NumericTable: 행 이름 + 특성 열(feature columns) + 레이블 열을 가지며, K-Means, PCA, 계층적 클러스터링(hierarchical clustering), 선형/다항식 피팅(linear/polynomial fitting), UMAP/PaCMAP, SHAP 등에서 공유되는 체인 가능한 확장 메서드.
-
딥러닝: CNN (Conv2D/Pooling/Dropout/... + Softmax/SVM/Regression 손실 함수), 문자 단위 RNN(char-level RNN), 다중 헤드 어텐션(multi-head attention)을 갖춘 인코더–디코더 Transformer, 피드포워드 ANN, GCN/GAT 그래프 네트워크, 액체 시간 상수 네트워크(liquid time-constant networks), 스파이킹 신경망(spiking neural networks), VAE/RBM/DBN, DQN 강화학습(reinforcement learning).
-
LLM 추론 및 학습: MoE 전문가를 갖춘 디코더 전용 Transformer, KV 캐시 프리필(prefill) + 증분 디코딩(incremental decoding), RoPE 위치 임베딩(positional embedding), AdamW 트레이너, 샘플링 전략 및 스키마 제약 함수 호출(agent loop).
-
고전 머신러닝: K-Means, 계층적 클러스터링, SVM, 결정 트리/랜덤 포레스트 (Bonsai), 나이브 베이즈(Naïve Bayes), HMM, XGBoost 스타일의 그래디언트 부스팅(gradient boosting), 연관 규칙(association rules), 시퀀스 정렬(sequence alignment), SHAP 값 설명.
-
차원 축소 및 매니폴드 학습: PCA, UMAP, PaCMAP, t-SNE.
-
GPU 이종 컴퓨팅(heterogeneous computing) — CUDA Driver API 상호 운용성(interop), NVRTC 커널 컴파일, 장치 메모리 및 스트림, BLAS/축소(reduction)/요소별(element-wise) 커널, IL→CUDA 소스 변환, 그리고 자동 백엔드 전환을 지원하는 GPU 텐서 런타임.
-
SIMD 벡터화 수학(vectorized math) — System.Numerics.Vector 기반 요소별 산술 연산, 행렬 커널(SimdMatrix), 축소 함수(SimdReduce), 그리고 float/double 데이터를 위한 수학 함수(SimdMath).
-
과학 파일 I/O — NetCDF, HDF5, Feather, SQLite3, HDSPack, msgpack 및 기타 이진 형식 외에도 MIME 텍스트/XML과 Excel(OpenXML) 파싱.
-
수학(Mathematics) — 선형 대수학, 통계 및 가설 검정(ANOVA), 데이터 피팅/부트스트래핑, Gibbs 샘플링, 신호 처리, 기호 수학 및 ODE 솔버 (Runge–Kutta, SUNDIALS CVODE 바인딩).
-
진화 알고리즘(Evolutionary algorithms) — Microsoft.VisualBasic.MachineLearning.Darwinism을 사용한 유전 알고리즘 및 차분 진화.
-
자연어 처리(Natural-language processing) — word2vec, TextRank 키워드 추출, KnowledgeGraph와 GraphQuery 객체 쿼리 DSL.
-
**시각화 /
패키지 사용하기
개별 라이브러리는 Microsoft.VisualBasic.* 계열의 NuGet 패키지로 게시됩니다 (예: 핵심 런타임 어셈블리 Microsoft.VisualBasic.Runtime). 다음 명령어로 프로젝트에 추가하세요:
dotnet add package Microsoft.VisualBasic.Runtime
소스에서 빌드하기
저장소(repository)를 클론하고, 모든 라이브러리 프로젝트를 참조하는 NuGet 솔루션을 빌드합니다:
git clone https://github.com/xieguigang/sciBASIC.git
cd sciBASIC
dotnet build nuget.slnx -c Release
단일 라이브러리를 빌드하려면, 해당 .vbproj 파일 (예: Microsoft.VisualBasic.Core/src/Core.vbproj, llm/llm.vbproj 또는 vs_solutions/VBS/VBS.vbproj)이나 vs_solutions/ 아래의 관련 솔루션을 엽니다.
빠른 시작 (Quick Start)
A. 클래식 sciBASIC# 콘솔 애플리케이션
Imports Microsoft.VisualBasic.ApplicationServices
Imports Microsoft.VisualBasic.CommandLine
Imports Microsoft.VisualBasic.CommandLine.Reflection
...
yourapp.exe /hello /name "sciBASIC#"
B. 또는 스크립트 작성하기 — 프로젝트 불필요
hello.vb를 저장합니다:
Dim name As String = ?"--name"
...
vbs 호스트를 사용하여 실행합니다 (["VBS 스크립트 엔진"]에 참조):
dotnet build vs_solutions/VBS/VBS.vbproj -c Release
.nuget/net10.0/vbs.exe hello.vb --name "sciBASIC#"
NumericTable — 전체 데이터 과학 파이프라인을 위한 단일 데이터 모델
Microsoft.VisualBasic.Core/src/Data/NumericTable.vb는 프레임워크의 통합 2차원(2-D) 데이터 모델을 정의합니다: 행 이름 + 특성 열 + 레이블 열 (레이블은 label:으로 접두사가 붙은 열입니다). sciBASIC#의 모든 머신러닝 알고리즘이 이 모델을 이해하므로, 데이터가 알고리즘 간에 변환 전용 코드 없이 흐릅니다. 단지 단계들을 연결하기만 하면 됩니다.
Imports Microsoft.VisualBasic.Data
...
*(`tutorials/VBS/scripts/kmeans/kmeans.vb` 발췌 — 완전한 Iris 클러스터링 + PCA + 산점도 데모)*
회귀(Regression) 역시 같은 방식으로 작동합니다:
```vbnet
Dim model = table.LinearFit(y := "y")
Dim quad = table.PolyFit(poly_n := 2)
Dim out = table.SetPrediction(model, withResidual := True)
...
(tutorials/VBS/scripts/linear_regression/linear_regression.vb 발췌)
주요 API 표면: nsamples / nfeatures / nlabels, Feature(name), GetLabel(name),
SetLabel(name, values), Slice(rows), Select(cols), Clone(), 그리고 IO 헬퍼(NumericTableIO.ReadCsv, WriteCsv)와 R 스타일의 print(tbl) 테이블 렌더링.
딥러닝 스위트 (Deep Learning Suite)
모든 모델은 공유된 텐서 런타임에서 **순수 관리형 VB.NET (pure managed VB.NET)**으로 구현되었습니다. 따라서 PyTorch/TensorFlow 네이티브 런타임이 필요하지 않으며, GPU는 ILCudaTensor를 통해 계층화(layered)할 수 있습니다.