
Diffusion model를 이해하는데, 통계확률적 기반이 많이 사용되어, 이참에 좀더 구조가 간단하고 확률적 생성모델인 VAE를 공부해보려고 하는데, Distribution ("분포")에 대한 백그라운드가 적어서 그런지 시간이 걸린다. 여튼, VAE는 AutoEncoder와 거의 유사한 구조의 모델이지만, Latent를 만들어내는 방식이 다르다. AutoEncoder에서는 Compressed된 형태의 Latent vector를 생성하여 얼마나 입력과 얼마나 유사한 출력을 갖는지에 관심이 있는 반면, VAE에서는 생성 모델이다 보니, 유사하지만 새로운 형태의 출력을 어떻게 만들것인가가 관건이다. 이를 위해서 Loss 함수는 두개의 Loss term들을 갖는다. 첫번째, AE와 같이 "Reconstruc..

간단히 파이썬으로 다음과 같이 해결 def gcd(a, b): while b > 0: a, b = b, a % b return a 완벽한 이해를 위해선 호제법이 동작하는 원리도 이해하면 좋겠지! 다음 유튜브 영상을 보면 쉽게 이해할 수 있다. 수악중독! 이분의 이름과 내이름이 같다. ㅎ https://www.youtube.com/watch?v=J5Yl2kHPAY4 백준 알고리즘에서 호제법은 필수인듯하다. 다른 방식으로 풀수 있지만, 시간제약으로 실패하는 경우가 있다. 간단한 알고리즘이므로 반드시 이해해 놓으면, 아주 많은 문제에서 활용할 수 있을 듯. 천천히 즐기며 하는 백준. 괜찮은 것 같다. 빨리 고수가 되어 [코딩 테스트] 준비 수업을 열어보고 싶다. 유클리드 호제법과 함께 소수 판별에 대한 부분도..

RTX 4090 Ada Lovelace와 Ampere의 가장 큰 차이점은 몰까? CUDA Core의 수가 꽤 많이 증가했다. 그리고 Tensor Cores의 수와 버전도 올라가고. 연산능력이 3090비해 두배 늘어났네! 특이한점은 FP8에 대한 연산능력이 새롭게 나타났다는 것인데, 좀더 적은 비트폭을 가지고도 딥러닝 속도를 크게 올릴 수 있을 듯하다. 2080에서와 3090에서는 FP8에 대한 지원을 하지 않았다는 점을 상기하자. 현재 GPU에서 INT4까지 연산을 지원하고 있는데, 잘하면 INT2나 INT1 (BNN을 GPU에서?)같은 극도의 데이터 형태까지 과연 지원하게 될까? 근데, FP16 Tensor TFLOPS와 BF16 Tensor TFLOPS간의 성능 차이는 왜 없는 것일까? BF16이 좀..

이번 실험은 fixed point 연산을 활용한 행렬곱을 진행하여 성능을 평가해본다. #ifdef solution5 typedef float Mat_Dtype; typedef ap_fixed Mat_DtypeOp; #endif 이전 코드에서 달라지는 부분은 행렬을 저장하는 array의 type만 재정의 하는 것이다. ap_fixed이 의미 하는 바는 22비트폭에 정수부분에 13비트, 나머지 9비트를 fractional part로 선언하는 것이다. Fixed point 값을 사용하였을 경우 합성 결과는 다음과 같다. 좀더 자세히 보면, 여기서 살펴볼 것은 DSP 사용이 현저히 줄어든 것을 볼 수 있다. 행렬 연산하는 로직 자체도 FF 및 LUT가 크게 줄어든 것을 볼수 있다. 특이한 것은 입력 loop와 ..

이번에는 행렬곱 연산의 정확도를 줄여 성능을 향상시키는 방법에 대한 실험을 진행한다. 기존의 코드와 비교하여 달라지는 좀은 행렬곱 연산시에 사용되는 array의 타입을 float에서 half (float)로 변환하는 것이다. #ifdef solution4 #include typedef float Mat_Dtype; typedef half Mat_DtypeOp;// 16 bit floating point #endif 이전 코드에서 Array의 타입을 half 타입으로 재정의하고 아래와 같이 input_A와 input_B array의 타입을 수정된 half 타입으로 변경하였다. Mat_DtypeOp input_A[MATSIZE][MATSIZE]; #pragma HLS ARRAY_PARTITION dim=2 ..

행렬곱을 이용한 HLS 최적화 실험 2번째로, Array Partition에 대해서 실험을 해보려고 한다. Array Partition은 단일 메모리를 분할하여 다수의 메모리 포트를 사용가능하게 함으로써 메모리 접근의 성능을 향상시켜 전체 행렬곱의 성능을 향상시키는데 목적이 있다. void matmul_3(hls::stream &in_A, hls::stream &out_C) { #pragma HLS INTERFACE mode=axis register_mode=both port=in_A register #pragma HLS INTERFACE mode=axis register_mode=both port=out_C register #pragma HLS INTERFACE mode=ap_ctrl_none port..

행렬곱 - Xilinx HLS 실험 다음은 가장 simple한 행렬곱 버전인 matmul_1이다. 현재 MATSIZE 값은 8이다. void matmul_1(hls::stream &in_A, hls::stream &out_C) { #pragma HLS INTERFACE mode=axis register_mode=both port=in_A register #pragma HLS INTERFACE mode=axis register_mode=both port=out_C register #pragma HLS INTERFACE mode=ap_ctrl_none port=return Mat_Dtype input_A[MATSIZE][MATSIZE]; Mat_Dtype input_B[MATSIZE][MATSIZE]; Ma..

학생들과 지난학기 배운 MIPS 프로세서를 작은 크기의 FPGA에 만들어 보는 작업을 진행하고자 한다. 툴 설치를 위해서는 인텔 다운로드센터로 가자! https://www.intel.com/content/www/us/en/collections/products/fpga/software/downloads.html?s=Newest FPGA Software Download Center Download Intel® Quartus® Prime Software, DSP Builder, Simulation Tools, HLS, SDKs, PAC S/W and more. Select by Operating System, by FPGA Device Family or Platform, or by Version. www.in..