본문 바로가기

분류 전체보기

(1234)
graph_executor 구축 및 테스트 Python 에서 정의된 연산 그래프, E 행렬을 긱반으로 CUDA 에서 실행할 수 있도록 CUDA 모듈 구현, 한 번에 실행 가능한 구조로 통합 run_graph.cu : CUDA 커널과 함수 정의, 행렬 곱, add, activation function 등의 연산을 E 행렬에 따라 수행, 최적화를 위해 shared memory + row 우선 접근 방식 적용 ✅ 4. 문제 해결 히스토리단계문제해결 방법Pybind11 연결모듈 import 실패.pyd 경로 명시적 등록 (sys.path.append)DLL 오류cudart64_120.dll not found경로 확인 → cudart64_12.dll로 교체 후 ctypes.CDLL() 명시 로드Pybind11 인자 불일치TypeError: incompat..
GraphCompiler 용 연산 리스트 생성 📊 컴파일된 그래프 연산 목록:00: {'input_idx': None, 'output_idx': None, 'op_type': 5, 'W': None, 'b': None, 'param_idx': None}01: {'input_idx': None, 'param_idx': None, 'output_idx': None, 'op_type': 0, 'W_shape': None, 'W': array([[ 0.3284561 , 2.98971941, 0.28608096, 0.10709452, 0.37845299, 1.27242187, 0.68838014, 0.38284216, -1.26867333, -0.39435668]])}02: {'input_idx': None, 'param_idx':..
뉴럴 네트워크에서의 정규화 입력과 출력 유닛의 숫자는 보통 데이터 집합의 차원수에 따라 결정된다. 은닉 유닛의 숫자 M 은 자유 매개변수로 최적의 예측 성능을 내도록 조절 가능 M 은 네트워크상의 매개변수들의 숫자를 조절한다. 적절한 M 값이 존재할 것이라고 기대할 수 있음 하지만 일반화 오류는 M 값에 대한 단순한 함수가 아니다. 이는 오류 함수의 지역적 최솟값 때문, 다항식 곡선 피팅의 경우 상대적으로 큰 M 값을 선택한 후 오류 함수에 정규화항을 포함시켜 복잡도를 조절하는 것으로 해결 ( 가중치 감쇠 ) 단순한 가중치 감쇠의 한계점은 해당 항이 네트워크의 몇몇 척도화 성질과 잘 맞지 않는다는 것 네트워크의 스케일과 동등성을 고려하지 않음ReLU 네트워크 같은 경우, 어떤 층 출력에 대해 앞뒤로 스케일을 조절해도 전체 함수는..
지역적 이차 근사 ( 기울기의 지역적 근사치, 이는 기울기가 현재 지점 근처에서 어떻게 변화하는지 ) 오류 함수 E(w) 의 지역적 이차 근사 local quadratic approximation 오류 함수의 지역적 이차 근사 정리 1. 목적최적화 문제에서 오류 함수 E(w) 를 최적점 w* 근처에서 곡률 정보를 반영한 이차 함수로 근사하여 다음을 얻기 위함빠르고 정밀한 최적화 방법함수의 기하학적 구조 파악불확실성 추정 및 확률적 근사 2. 2차 테일러 전개어떤 기준점 w^ 주변에서 E(w) 를 2차 태일러 전개하면b = delta E(w^) : 기울기H = delta^2 E(w^) : 헤시안 3. 최소점 w* 에서의 특수한 경우최적점에서는 delta E(w*) = 0 -> 선ㄴ형항 제거남는 형태 4. 고유벡터를 사용한 좌표 변환H 는 실대칭 행렬 -> 정규직교 고유벡터 집합 보유새로운 좌표계 u ..
Feed Forward Network Function ( 고정된 기저 함수에서의 가중치 학습과 기저 함수와 그 가중치 학습 ) 회귀와 분류의 선형 모델은 비선형 기저 함수 phi_j(x) 의 선형 결합을 바탕으로 하고 있다.f 는 분류의 경우 비선형 활성화 함수이고, 회귀의 경우 항등 함수, 목표는 이 모델을 확장시켜서 기저 함수 phi_j(x) 를 매개변수에 종속적이게 만들고 이 매개변수들이 계수 w_j 와 함께 훈련 단계에서 조절되도록 하는 것, 매개변수적인 비선형 기저 함수를 만드는 데는 여러 방법이 있다. 각각의 기저 함수는 그 자체가 입력값의 선형 결합들에 대한 비선형 함수이며, 이때 선형 결합에서의 계수들이 조절 가능한 매개변수다.더보기고정된 기저 함수 기반의 선형 모델을 학습 가능한 비선형 기저 함수 모델로 확장하는 과정의 설명phi_j(x) : 입력 x 에 대해 정의된 기저 함수 basis functionw_j :..
neural network ( Support Vector Machine 과의 비교, 더 작은 모델을 구현하는 것이 더 좋음! ) 고정된 기저 함수들의 선형 결합을 바탕으로 한 회귀와 분류 모델들은 해석적 / 계산적 성질을 가지고 있지만, 차원의 저주 문제로 인해 실제적으로 사용하는 데 있어서는 한계가 존재한다. 이러한 모델들을 큰 스케일의 문제에서 사용하기 위해서는 기저 함수가 데이터를 바탕으로 적응되도록 하는 것이 필요하다. Support Vector Machine 은 먼저 훈련 데이터 포인트들의 중심에 있는 기저 함수들을 정의한 후 훈련 과정에서 이들 중 일부를 선택하는 방식으로 이 문제를 해결한다. 훈련 과정에서 비선형 최적화가 필요하지만 목적 함수 자체가 볼록 함수이므로 최적화 문제의 해가 비교적 간단하다.더보기중심에 있는 기저 함수의 정의이는 kernel method 를 의미, 입력 데이터를 고차원 특징 공간으로 매핑한..
graph_ops 에 담긴 정보, operation plan 현재 graph_ops 의 구성[ ("matmul", "x0", "dense1_W", "dense1_out"), ("add", "dense1_out", "dense1_b", "dense1_out"), ("activation", "sigmoid", "dense1_out", "sig1_out")] 이 정보는 어떤 연산을 어떤 노드들 사이에 연결할지만 표현, 그 값이나 shape, dtype 등은 포함되어 있지 않음가중치 정보는 각 레이어 객체 내부에 존재한다. ✅ 실행 시 전체 흐름 구조Sequential.compile_graph()연산 계획(graph_ops)만 생성GraphCompiler or BackendExecutor해당 계획을 기반으로 CUDA 실행 준비BackendExecutor...
layer 별 call 연산 내 순전파, 역전파 연산 수행 방식에서 바꾸기 현재 각 layer 의 call() 메서드에서 CuPy 연산을 직접 수행하는 방식의 사용, 모델 실행이 레이어 단위로 분할되어 있어 병목 지점이 발생할 가능성이 있다. 이 구조를 Graph Compiler 등을 통해 전체 모델 실행을 backend 에서 한 번에 처리하도록 바꾸도록 한다. 1. CUDA 호출 횟수 감소현재 구조 : 레이어마다 개별 call() 시 CuPy 메서드 호출 -> 내부적으로 여러 번 CUDA kernel launch 발생개선 구조 : 전체 모델을 표현한 연산 그래프를 단일 CUDA 호출로 처리 -> 오버헤드 최소화 2. 연산 간 데이터 복사 최소화레이어마다 CuPy 를 사용하면 각 레이어 출력이 GPU 메모리에 있지만, 중간 연산 결과를 Python 이 관리하며 참조 -> 불필요..