기본 콘텐츠로 건너뛰기

chagpt를 625배 빠르게 처리하는 AI반도체가 한국에서 나왔다?




기사 본문

요즘 한국에서 AI반도체를 만들었다는 둥의 이야기가 여기저기서 나오고 있네요.. 
AI반도체란게 그렇게 갑자기 툭 튀어 나올 정도로 얕은 기술인건가요?
아니면 다들 신경 안쓰고 있는 시기에 십수년에 걸쳐서 연구를 했던걸까요?

이 내용은 한국의 특정 기관을 까내리는 것이 아닌 제가 느낀 이상한 점을 이야기한 것 뿐이기 때문에, 
제가 틀렸을 수도 있습니다. 

실제로 IEEE라는 글로벌 표준을 지정하는 곳에도 신청이 들어갈 정도면 그만큼의 기술력과 자부심이 있는것은 아닌가 싶습니다. 




단지, 기사화 된 내용이 정말 맞는 건지 의문이 들어서 꼬집어 보는 것 뿐이니, 이런 의문점이 좀더 클리어하게 공개가 되면 좋겠다 싶습니다. 

내용을 보면 




입력 값의 길이로 SNN과 DNN을 분기시키는 것이 골자입니다. 

원래 DNN은 엄청난 수의 연산이 필요한데, Core를 3400개 이상 가진 NVIDIA가 병렬로 연산하면 이론상으론 8코어 CPU의 400배 이상 빠릅니다. 

하지만 SNN의 경우 그렇게 많은 연산을 필요로 하지 않기 떄문에 DNN만큼의 획기적인 변화는 나오지 않지요.. 즉, SNN만으로 처리하는 경우 역으로 더 빠를 수 있습니다. 

그렇다고 하면 모두 SNN을 쓰지 왜 DNN을 쓸까요? 

서로 처리하는 영역이 다르기 때문에 그렇게 쓸 수가 없었던 것이죠. 
그걸 처리 요청을 받아서 굳이 DNN으로 쓸 필요가 없는 단순연산은 SNN으로 변환하고자 하는게 이번 뉴스거리 일 겁니다. 

단지 그 이야기라면 그냥 요청 처리시에 구분해서 던진다거나, 
DNN의 오픈소스에 입력값을 전처리할 때 SNN으로 분기만 시키면 되는거 아닌가요?

만약 그렇다고 한다면 
기사 내용에서 두 가지 중요한 문제가 있는데요.. 

첫 번쨰, 개발한 것이 AI반도체라고 했는데요.. 
AI반도체는 LLM같은 모델을 넣은 반도체가 아니라 LLM모델등의 처리 요청을 빠르게 계산하는 숫자형 연산장치를 가지는게 반도체인데요.. 

설명에는 DNN과 SNN의 방향만 바꾸는 로직이라고 분명하게 적혀 있는데, 단순히 입력된 Token의 길이만 가지고 DNN과 SNN을 호출만 하는 로직을 Flash memory같은데에 넣은거 아닐까 하는 생각이 조심스럽게 나옵니다. 

두 번째는 DNN은 많은 전력을 쓰기 때문에 작은 내용은 SNN으로 던지는 기술이라고 하면서 chatgpt 2.0에 테스트를 했다는 내용이 나옵니다. 

일반적으로 ChatGPT-2와 같은 대규모 자연어 처리 모델을 Spiking Neural Network(SNN)에 적용하는 것은 현재로서는 흔한 방법은 아닙니다. 이 두 가지는 서로 다른 신경망 아키텍처이며, 각각의 특성과 용도가 다릅니다.

Spiking Neural Network(SNN)은 주로 생물학적 뇌의 작동 방식을 모방하여 신호를 이벤트 기반으로 처리하는 데에 사용됩니다. 반면에 ChatGPT-2는 대규모의 Deep Neural Network(DNN) 모델로, 텍스트 생성 및 이해와 같은 자연어 처리 작업에 사용됩니다. 이 두 가지는 본질적으로 다른 목적과 기능을 갖고 있습니다.

SNN의 효율화는 이미 Intel에서 발표한 Loihi라는 NPU(Neural Processing Unit)를 이미 발표하여 DNN과는 다른 이미지 프로세싱 기술에 특화된 칩으로 발표하여 이미지 프로세싱에 효율적인 SNN을 효율화 하는 것이지요. 즉, DNN과 SNN은 구조적으로 다르기 때문에 DNN에 효율적인 초대형 병렬 처리는 NVIDIA를 이길 수 없으니 Intel은 단일 프로세스의 고속 처리가 장점이라 이걸 살린 SNN쪽에 포커싱을 했습니다. 인텔이 만든 AI 반도체는 SNN용이란 얘기지요. 
SNN과 DNN을 모두 다 처리 가능하다면 왜 Intel은 DNN을 포기하고 SNN을 포커싱 했을까요?

기사 내용을 보면 DNN이나 SNN으로 분기시켜 던지는 내용이지 AI칩으로서의 처리 효율을 이야기 하지 않았지요. 

보드 이미지와 테스트한 환경을 봅시다. 



보드를 보면 단순 Raspberry Pi용 보드에 Intel에서 인수한 Altera의 ARM용 칩인 Cyclone V 칩을 꽂은 보드인데요… 
단순히 기사의 알고리즘이라면 시연할 때 Raspbessry Pi에 Linux를 올리고 웹서버를 올린 뒤에 
스마트폰에서 브라우저 띄워 접속후 웹서버에 던진 값을 SNN과 DNN분기 처리하게 프로그래밍 하고, 
ChatGPT 2오픈소스를 띄워 거기에 던졌겠죠.. 

그렇게 하면 바로 AI반도체도 필요없는 상보형 처리라고 말할 수 있을 것 같습니다. 
ARM CPU에서도 충분한 성능을 낼 수 있는 chatgpt3레벨에 상당한 오픈소스가 있거든요.. 



게다가 ARM CPU를 사용하면 전력 대비 성능이 충분히 범용 GPU보다 적은 전력으로 결과를 낼 수 있지요. 
원래부터 ARM의 CPU자체가 전력이 낮으니까요.. 

즉, AI칩이라고 적혀있는 저 칩의 존재가 의문입니다. 
단순 Flash memory 올려서 거기에 SNN이랑 DNN을 분기하는 소스코드 좀 들어간 것이 아닐까요? 

물론 제 생각에는 기사의 내용이 충분히 사실일 겁니다. 
그냥 기사가 불분명해서 태클을 거는 것 뿐입니다. 
제가 강조하는 한국인의 강점을 이야기 했죠.. 
원리는 모르지만 엄청난 대입을 통해 결과물을 만들어냅니다. 
우연히 많은 종류를 대입하다가 좋은 결과를 냈을 수도 있습니다 
단지, 그게 분기 알고리즘이지 AI칩은 아니지 않느냐가 제 생각일 뿐입니다. 


제가 보통 믿는건 이런거죠.. 
이 내용을 한 번 보시죠. 




요즘 떠들썩한 MS에서 내놓은 the era of 1-bit LLMS 라는 알고리즘입니다. 
이 알고리즘으로 기존에 소숫점 연산을 -1, 0, 1만의 정수연산으로 곱셈없이 덧셈만으로 연산하면 충분히 고속 연산이 가능하다는 내용인데요.. 

이런 알고리즘 자체의 혁신은 전 믿는 편입니다. 
단지 혁신이 된 만큼 세분화가 되어서 엄청 효율적인 분야와 쓰기 힘든 분야로 나뉘어 지겠지요. 

제가 좀 지식이 짧아서 그럴 순 있겠지만, 

사물인지 알고리즘은 서로 직각인 차원을 몇 개를 만드느냐에 따라서 인지 정확도가 올라갑니다. 
서로 직각인 vector라는 것은 0이외는 절대 겹치지 않는 속성을 의미하며
우리는 3차원 세상에서 살고 있지만, 
수학은 100차원이든 200차원이든 마음대로 만들 수 있죠. 
머릿속으로 그리는 구조 상 XYZ축이 서로 90도가 되면 추가로 각각이 90도가 되는 축을 만들 수 없잖아요?
하지만 수학에서는 공간에 구현하지 않기 때문에 무한히 90도가 되는 축을 만들 수 있답니다. 
이 축에 대해서 예를 들면 
사과를 인지하기 위해서는 
빨강이란 색깔 벡터와 야구공 사이즈 라는 크기 벡터,  어느 정도 딱딱한 정도를 나타내는 강성 벡터, 신맛을 나타내는 미각 벡터 등등 서로 상관없는 다양한 벡터를 가지고 정의를 내릴 수 있고, 
이 벡터가 많을 수록 사과에 근접할 수 있습니다. 

그렇다면 정확도를 더 나타내기 위해서 엄청난 벡터를 만들 수 있는데 이들의 벡터들의 연관성 계산등을 하다보면 소숫점이 나오게 됩니다. 
저게 LLM만을 위한 알고리즘이라면 -1, 0, 1만으로 계산이 가능할 수도 있지만, 
그렇게 되었을 때의 정밀도의 오차가 발생하여 그걸 무시하는 형태의 결과에선 성능이 좋겠지만, 
굳이 소숫점으로 미세하게 나눠야 하는 정도가 필요한 연산에선 쓰이지 못할거 같다는게 제 의견입니다. 

하지만 현재 많은 기술이 chatgpt로 넘어가고 있기 때문에 
그에 최적화된 알고리즘이 나올테고, 
그 중에 하나가 위의 논문이 아닐까 합니다. 

저 위의 논문은 연산용 알고리즘이지 저걸로 AI반도체라고 하지 않습니다.

만약 MS의 논문에 맞는 연산용 반도체를 만든다면 
기존 GPU와는 연산방법이 다른 AI칩을 만들겠죠. 

그런데 처음 기사에서 발표한 것은 
연산방법이 다른 것도 아니고 단지 방향만 바꿔주는 방법론 뿐인데 AI반도체라고 한단 말입니다. 

어떠한 GPU에서도 LLM로직을 가지고 있지 않습니다. 
GPU는 숫자 연산을 아주 잘해줄 뿐 LLM에 대한 소스코드는 CPU의 메인 메모리에 올려져 있겠지요. 
그리고 그 로직에 맞추어 GPU에 연산을 던지고 받을 뿐이구요…. 
즉 GPU는 숫자 계산만 해주는 것이지요. 

실제로 AI처리 명령의 흐름을 보면.. 

1. 데이터 전처리 및 준비:
• 데이터는 주로 CPU에서 전처리되고 준비됩니다. 이 단계에서는 데이터의 불필요한 부분을 제거하거나 변환하고, 모델에 입력으로 사용할 수 있는 형식으로 변환됩니다.
2. 모델 로딩:
• 모델은 주로 CPU에서 로딩되고 메모리에 올려집니다. 모델의 가중치 및 구조를 메모리에 로드하는 작업은 CPU에서 수행됩니다.
3. 연산 처리:
• 모델의 연산 처리는 주로 NPU에서 이루어집니다. NPU는 주로 행렬 및 벡터 연산을 효율적으로 처리할 수 있는 하드웨어로, 대규모의 신경망 모델을 빠르게 실행할 수 있습니다.
4. 데이터 전송:
• 처리된 결과는 NPU에서 CPU로 다시 전송될 수 있습니다. 이러한 경우, NPU에서 처리된 출력 데이터는 CPU로 다시 전송되어 추가적인 처리나 저장 등의 작업을 수행할 수 있습니다.
5. 출력 처리:
• 처리된 결과는 CPU에서 추가적인 후처리 작업이나 결과의 분석 등이 수행될 수 있습니다. 이 단계에서는 모델의 출력을 해석하거나 사용자에게 제공하기 위해 다양한 작업이 수행될 수 있습니다.

여기서 모델은 CPU에서 로딩되어 메인메모리로 올라갑니다. 즉, 기사에서 이야기한 SNN, DNN의 분기는 바로 여기서 하지 않으면 분기가 안되지요.. 
그리고 선택후 SNN이나 DNN의 처리가 보통 CPU내부에 자리잡은 NPU나 외부 장치인 GPU를 타고 처리를 하는데, 저 보드라면 오른쪽 칩이 GPU 또는 NPU역할을 하는게 아닐까 합니다. 그럼 SNN이랑 DNN을 분기시키는것은 칩이 아닌 CPU에 올라간 그냥 소스코드라는 이야기 이죠.  

결론으로 말하자면, 
한국인이라면 충분히 다른 나라에 비해 빨리 다양한 조합을 이용해서 효율적인 결과물을 만들 수 있다고 생각합니다. 
하지만, 그건 응용방법의 효율화이지, 그게 AI칩은 아닐거란 이야기 이지요. 

게다가 이 발표가 어떤 부분은 세계 최초일 수 있지만 커다란 흐름은 세계 최초가 아닙니다. 
이미 DNN의 리소스를 너무 많이 먹는다는 한계는 전 세계에서 알고 있습니다. 
때문에 DNN을 어떻게 단순화 시킬까를 고민했구요.. 

그렇게 해서 나온게 DNN의 연산 단순화에 MS의 the era of 1-bit LLMS 가 나온 것이고, 
Intel은 앞으로 DNN보다 SNN을 응용한 모델이 더 효율적일 것이라는 판단에 
SNN전용 NPU를 만들었지요. 

MS는 알고리즘 자체를 뒤집는 발표를 한 것이고, 
Intel은 반도체 구조 자체를 바꾼 겁니다. 
만약 AI칩만으로 SNN, DNN을 분기만 한다면 저 두 기업의 발표랑 비교하면 왠지 약해 보이지 않나요? 

그건 그렇다치고, 
사실 이 대목에서 이상하다 생각해서 이 자료를 찾기 시작한 건데요.. 
625배.. 라는건 모르는 사람은 엄청나다고 생각할 수 있는데요.. 

테스트 환경의 문제라고 봅니다. 
GPU자체가 200W이상을 먹습니다. 
Raspberry Pi 4는 약 2W에서 7.5W까지 소비할 수 있습니다. 
단순히 이렇게만 보면 100배 차이네요.. 
하지만 앞에서 설명했듯이 ARM CPU에서 chatgpt3까지 돌릴 수 있기 때문에 Raspberri pi 만 사용한다 칩시다. 이것저것 좀더 효율을 내면 그냥 600배라고 적을 수 있네요.. 
타사에서도 ARM제품으로 테스트를 하면 이렇게 광고하지요.. 



만약 arm끼리 비교해서 효율이 이만큼 나왔다 하면 아 그런가보다 하고 저도 깊이 안파고 박수치고 지나갔을 거 같네요.. 
뭐, 다른데도 이렇게 광고하니 상관 없으려나요?
그럼 저건 아무 알고리즘 없이 480배 나왔는데 
이번 기사는 새로운 시도를 했는데 625배네요.. 그럼 타사대비 1.3배 정도는 나오니까 잘한거려나요?

여하튼..

항상 빠른 속도로 새로운 시도를 하여 누구보다 빠른 성장을 하고 있는 한국인의 기술력을 믿습니다. 
하지만, 돈독에 올라 누가 피해를 보든 사기치는 한국인들의 습성도 알고 있습니다. 
사실 오랜 연구를 지원도 안해주는 국가나 대기업의 실정 때문에 눈에띄는 수입모델이 필요한 것도 알고 있습니다. 

일본에서도 NVIDIA의 10배 이상 효율을 내는 처리 알고리즘을 가진 AI칩을 만들었다고 했죠. 
한국은 더욱 뛰어난 AI칩을 만들 수 있을거란 생각을 합니다. 
워낙 파격적인 시도를 많이 하기 때문에 상상을 초월한 결과물을 내곤 하니까요.. 
하지만, 아직 조심스러운 이 때 
너무 무분별한 기사들이 진짜인지 확신이 없는 결과물을 마구 퍼뜨리진 않았스면 합니다. 

기사는 빠른게 생명인 것은 알겠지만, 
그것만 믿고 투자를 하시는 개인들이 잘못되지 않았으면 하네요. 


giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

댓글

이 블로그의 인기 게시물

Alter table 에서 modify 와 change 의 차이 :: SQL Server

두 개의 차이를 모르는 경우가 많아서 정리합니다.  modify는 필드의 속성값을 바꿀때 사용하구요.. change는 필드명을 바꿀떄 사용합니다.  alter table tbbs modify bNote varchar(2000) NULL; alter table tbbs change bNoteOrg bNoteNew varchar(2000) NULL; change에는 원래 필드와 바꾸고 싶은 필드명을 넣어서 필드명을 바꾸는 것이죠~ 더 많은 SQL Server 팁을 보려면  https://github.com/LowyShin/KnowledgeBase/tree/master/wiki/SQL-Server giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

책에서는 안 알려주는 대규모 트래픽을 위한 설계

음성 버전 :  https://www.youtube.com/watch?v=ZZlW6diG_XM 대규모 트래픽을 커버하는 첫 페이지 만드는 법..  보통 DB를 연결할 때 대규모 설계는 어떻게 하시나요?  잘 만들었다는 전제 하에 동접 3000명 이하는  어떤 DBMS를 사용해도 문제 없이 돌아갑니다.  여기서 이미 터졌다면 이 콘텐츠를 보기 전에 DB의 기초부터 보셔야 합니다.  아.. 개발 코드가 터졌다구요? 그럼 개발자를 때리셔야지요..  만약 3000명을 넘겼다면? 이제 Write/Read를 분리해서  1 CRUD + n개의 READ Replica를 만들겠죠?  보통 Read Replica는 5개가 최대라고 보시면 됩니다.  누가 연구한 자료가 있었는데...  6번째 레플리카를 만든느 순간 마스터가 되는 서버의 효율 저하 때문에  5번째에서 6번쨰로 올릴때의 성능이 급격히 줄어든다는 연구 결과가 있습니다.  때문에 Azure에서도 replica설정할 때 5대까지 밖에 설정 못하게 되어 있지요.  유저의 행동 패턴에 따라 다르긴 하지만,  1 CRUD + 5 Read Replica의 경우 동접 15000명 정도는 커버 합니다.  즉, 동접 15000명 에서 다시 터져서 저를 부르는 경우가 많지요..  이 때부터는  회원 DB, 게시판DB, 서비스DB, 과금 DB 등등 으로 성격, 서로의 연관도에 따라 나누기 시작합니다.  물리적으로 DB가 나눠지면 Join을 못하거나 Linked Table또는 LinkDB등의 연결자를 이용해서 JOIN이 되기도 합니다.  그에 따라 성능 차이가 생기지만 가장 중요한 포인트는  서로 다른 물리적 테이블의 JOIN은 인덱스를 타지 않는다!  라는 것입니다. 즉, JOIN할 테이블들을 최소한으로 만든 뒤에 JOIN을 걸지 않으면 NoSQ...

BI의 궁극판! Apache Drill을 써보자!

사실 Apache Drill 은 BI(Business Intelligence)라고 부르는 것 보다는 단순 데이터 연결 엔진이다. https://drill.apache.org/ 하지만 내가 왜 극찬을 하느냐면.. DBA로서 항상 문제가 되어왔던게, 이기종 데이터의 변환이나 처리였다. 포맷을 맞추는데 엄청난 시간이 걸리고, 데이터 임포트 실패가 무수하게 나고.. 한 번 잘못 데이터를 추출하면 다시 조정, 변환, 추출하는데 시간이 많이 걸린다. 그런데! Apache Drill은 그냥 RDB를 CSV랑 연결해서 조인해서 통계를 낼 수 있다. 그것도 표준 SQL을 사용하여! 예를 들어, CSV의 세 번째 컬럼이 price 이고, 물건의 판매이력을 PG사에서 CSV로 출력 받았다. 우리 DB와의 검증을 위해서는 수동으로 Import를 한 뒤에 포맷이 안맞아 잘리는 데이터가 있다면 다시 맞춰주고, 재 임포트를 수십 번, 그리고 나서 겨우 들어간 데이터를 조인하여 빠진 데이터를 분간한다. 숫자가 적다면 개발자가 개발로 처리할 수도 있지만, 건수가 하루에 300만건 짜리라면.. 한 달 온 파일은 9천만 건이다. 프로그램으로 고작 처리하는 것이 초당 500건. 거의 20만초, 에러 없이 약 56시간.. 에러가 생기면 다시 56시간.. ㅠㅡㅠ 이런게 현실이기 때문에 쿼리 말고는 방법이 없다. apache drill 의 진면목을 보자! 이번에는 좀 범용 적인 MySQL DB와 붙여 보자. . 난 이번에는 Mac에서 작업을 했기 때문에 그냥 다운 받아서 풀었음.. https://drill.apache.org/download/ 여기서 자기 OS에 맞는 버전을 받아서 설치하시길.. 압축을 풀고 나면 MySQL 커넥터를 붙여야 한다. https://dev.mysql.com/downloads/connector/j/5.1.html 여기서 다운로드 이런 커넥터 들을 붙일 때마다 콘피그를 수정해 줘야 하지만, 몇 번만...