
9월부터 GCP 기반 AI 인재 양성 프로그램에 참여하게 되었다.
클라우드는 처음이라 잘할 수 있을지 모르겠지만.., 열심히 해봅시다~ 아자아자
오늘 선생님께 허락도 받았고 ㅎㅎ 여기에 앞으로 배운 내용을 차근차근 정리해갈 예정이다.
참고로 복습하며 추가로 덧붙이는 내용도 있다..!
파이팅탱통~!
현재 사용하는 컴퓨터 시스템은 프로그램 내장 방식(노이만(Neumann)형 컴퓨터 시스템) 을 기반한다.
컴퓨터 시스템에서는 모든 데이터를 컴퓨터 내부에 내장(기억)한다.
컴퓨터의 전원을 켜면, 일정 시간 동안 환경이 세팅되며 이 과정에서 OS(운영체제)가 시작된다.
스마트폰도 마찬가지로 전원을 껐다가 켜면 환경 설정이 시작된다.
이때 컴퓨터나 스마트폰은 필요한 데이터를 불러오고, 프로그램을 실행하며 환경을 구축한다.
따라서, 컴퓨터 내부에 데이터를 저장하는 시간, 프로그램으로부터 데이터를 불러오는 시간 등
내부적으로 데이터를 처리하고 프로그램을 실행하는 데 시간이 필요하며,
이러한 이유로 초기 가동 시간이 소요된다.
이 과정은 컴퓨터가 프로그램 내장 방식이기 때문이다.
컴퓨터 구성요소에는 하드웨어 그리고 소프트웨어 가 있다.
기계 장치와 기계 장치를 제어해 주는 프로그램이다.
현재는 소프트웨어를 운영하는데 초점이 맞춰져 있지만, 프로그램을 동작하기 위해서는 하드웨어가 필요하다.
하드웨어에는 CPU, Memory, I/O Device 가 있다.
연산 / 제어 기능
CPU에는 ALU, CU, Register가 있으며, 세 가지를 합쳐서 CPU core라고 한다.
CPU는 연산이 핵심이다.
ALU는 연산 을 담당한다.
사칙연산, 더하기 빼기 등
대소비교, 크거나 작냐, 같거나 같지 않냐
and, or, 참, 거짓 등
프로그램의 명령어를 해석하고 장치가 어떤 작업을 수행할지 결정한다.
연산에 필요한 명령을 해석하는 것을 IR이라고한다.
2 + 3 = 5
덧셈 = 이항 연산자 = 명령
숫자 = 데이터 = 항
CPU는 기억 기능이 없으며, 연산을 목표로 한다.
기억이 목적이 아니기 때문에 연산할 데이터를 가지고 있지 않다.
즉, CPU만 있다면 컴퓨터 시스템이 정상적으로 작동하지 않는다.
기억 기능이 없기 때문에 CPU에 의해 처리되는 명령도 CPU는 가지고 있지 않고
명령 해석 결과에 의해 처리되는 데이터도 없다.
CPU는 연산에 의한 제어가 주 기능이며,
대량의 데이터를 저장하고 있지 않는다.
컴퓨터 시스템이라고 말하려고 하려면, 반드시 CPU가 있어야 한다.
즉, CPU가 있다면 컴퓨터 시스템이라고 볼 수 있다(그 외 하드웨어도 필요).
컴퓨터, 스마트폰, 냉장고, 전기 자동차 등 대부분의 최신 전자기기에 CPU가 내장되며 컴퓨터 시스템으로 볼 수 있다.
CPU 플랫폼을 구성할 때 아키텍처를 X86 또는 ARM 등 중에 선택 할 수 있다.
후에 클라우드에서 아키텍처를 어떤 기반으로 쓸지 결정할 수 있으므로 중요하다.
CPU가 사용하는 임시 데이터 저장
Register(레지스터)는 임시 기억장치이다.
CPU는 기억장치가 없지만, 동작하기 위해 명령어와 데이터가 필요하다.
예를 들어, 숫자를 연산하면 올림이나 내림이 필요하며, 두 자릿수부터는 올림이 발생한다.
그래서 이 올림수를 어디선가는 저장을 해야하는데, 임시적으로 데이터를 저장하는 역할을 Register가 담당한다.
근데 CPU에 저장 장치가 없다고 외부에서 가져다가 쓰면 속도가 느려지기 때문에 임시기억 장치를 만들었다.
하지만, Register는 우리가 말하는 Memory라고 보기는 어렵다.
CPU는 ALU, CU, Register가 있고, 이것을 CPU core라고 한다.
그래서 어떤 코어를 쓰는지에 따라 X86 core, ARM core라고 정해진다.
참고로, X86의 core와 ARM core는 다르므로, 명령 호환이 안된다.
가상 환경을 만들어 사용은 가능하나, 직접적인 호환은 어렵다.
컴퓨터와 핸드폰 core가 다르기 때문에 호환이 안된다.
X86 - 32 bit Data bus, X86_X64 - 64 bit Data bus
최근에는 ARM core 노트북도 나오고 있다.
Qualcomm(퀄컴)은 스마트폰 CPU를 제조하는데, 노트북용 CPU도 생산하기 시작했다.
때문에, ARM에서 동작하는 윈도우가 있고, X86에서 동작하는 윈도우가 있다.
같은 윈도우여도 호환이 안된다. 파편화 된 것이다(같은 os를 사용하는 데 호환이 안되면 버전 문제).
ARM core는 X86 보다 성능이 더 뛰어나진 않지만, 최근에는 X86에 가까운 CPU가 됐다.
CPU와 Memory간의 통신을 수행하는 통로
CPU는 기본적으로 기억기능이 없다.
register은 임시 저장소일 뿐이라 크기가 크지 않으므로,
큰 크기의 프로그램이나 데이터를 저장할 수 없다.
CPU는 연산에 집중하도록 하고 기억을 외부에다가 하는데,
CPU와 외부를 연결하는 장치, 즉 통로를 BUS라고 한다.
메모리 주소 지정을 위해 사용는 통로, Address bus 크기에 따라 메모리 최대 크기 결정
CPU가 데이터를 읽어오거나 저장할 메모리의 주소를 지정할 때 사용된다.
주소 버스의 크기에 따라 CPU가 접근할 수 있는 메모리의 최대 용량이 결정된다.
데이터가 이동하는 통로, CPU 종류 결정시 사용하는 크기
데이터 버스는 CPU와 메모리 또는 I/O 장치 간의 데이터 전송을 담당하는 통로다.
데이터를 실제로 읽어오거나 저장할 때 사용된다.
데이터 버스의 크기(32비트, 64비트 등)는 한 번에 전송할 수 있는 데이터의 양을 결정한다.
제어 신호가 이동하는 통로
메모리 및 I/O 장치에 대한 제어 신호를 전달하는 통로다.
이 버스는 CPU가 수행해야 할 동작(읽기, 쓰기 등)을 지시한다.
X86, ARM 모두 동작 과정은 동일하다.
단, 구조나 명령 형태는 다르다.
CU의 명령 해석기(IR)에 명령을 읽어서 저장
명령 해석기에 의해 명령 해석 - 연산 수행, I/O 수행
명령 해석 결과에 따라 메모리에서 데이터 읽기 - 명령에 따라서 동작
명령 처리 - 연산 (ALU 사용), I/O (I/O device 사용)
명령 처리에 따른 결과를 메모리에 저장
메모리 주소 지정 (Address bus)
읽기 또는 쓰기 명령 (Control bus)
실제 데이터 읽기 쓰기 (Data bus)
클라우드 쓸 때 어떤 cpu를 결정 해야 된다.
CPU만 있으면 작동이 안 되는 이유는 CPU 자체에 기억 기능이 없기 때문이다.
그래서 반드시 메모리가 필요하다.
컴퓨터 구매 시 CPU core를 결정하고 메모리 용량을 결정하게 된다.
프로그램 코드와 데이터 저장, 일시적인 저장, I/O 장치를 위한공간
무언가를 저장하는 장치를 메모리라고 하며,
보통 메모리라고 하면 램 을 뜻한다.
4기가 메모리, 8기가 메모리 등.. = RAM을 뜻한다.
시스템의 기본 동작을 위한 불변 데이터를 저장하고, 주로 부팅 시 사용된다.
(예시: 소프트웨어의 초기 부팅 관련 부분, 프린터 작동에 관여하는 펌웨어 명령 등)
Mask ROM
임베디드 장치에서 많이 사용되며, 데이터를 영구적으로 저장할 수 있는 비휘발성 메모리다.
제조 시에 프로그램이나 데이터를 저장하고 밀봉한다(데이터 수정 불가).
PROM, EPROM, EEPROM (Flash Memory)
최근에 ROM의 내용을 수정해야 하는 경우가 있어 수정 가능하게 하는 형태가 나타났다.
PROM
사용자가 데이터를 한 번만 프로그램할 수 있는 읽기 전용 메모리
EPROM
자외선(UV)으로 데이터를 지우고 다시 프로그램할 수 있는 읽기 전용 메모리(정기적 수정)
EEPROM
EEPROM은 전기적으로 데이터를 지우고 다시 쓸 수 있는 읽기 전용 메모리
Flash Memory
EEPROM의 발전된 형태로, 데이터가 전기적으로 지워지고 다시 쓸 수 있는 비휘발성 메모리
USB 플래시 드라이브, SSD, 메모리 카드 등 다양한 저장 장치에서 사용되고 속도가 빠르다.
ROM은 비휘발성 메모리로, 전원이 꺼져도 데이터가 유지되므로 데이터를 영구적으로 저장할 수 있다.
RAM은 휘발성 메모리로, 전원이 꺼지면 데이터가 사라지며, 데이터는 임시로 저장되고, 빠른 접근이 가능하다.
부팅 시 ROM의 데이터를 RAM으로 복사하여, 빠르게 접근할 수 있도록 한다.
자유롭게 읽기와 쓰기가 가능하다.
SRAM (Static RAM)
속도가 빠르다. 가격이 비싸다.
Cache memory
DRAM( Dynamic RAM )
일반적으로 가격이 저렴한 DRAM을 사용하지만, 속도가 느리다.
SRAM은 가격이 비싸지만, 속도가 빠르다.
CPU와 RAM은 bus로 연결되는데, 보통 CPU 보다 RAM의 속도가 느리다.
따라서, 처리 결과를 RAM에 받아서 처리하기 때문에 CPU가 아무리 빨라도 전체적인 속도는 RAM에 맞춰진다.
그래서 Cache memory (켈시 메모리)라는 것이 나왔다.
CPU와 RAM 사이에 임시 저장공간을 생성한다.
L1 캐시는 가장 빠르고 CPU 내부에 위치하며, L2 캐시는 L1 캐시보다 크고 다소 느리지만 여전히 빠르다.
캐시 메모리는 CPU와 메모리(RAM) 사이의 데이터 전송 속도를 최적화하기 위해 설계되었으며, 이로 인해 캐시 메모리는 RAM보다 속도가 더 빠르다.
주 메모리는 대부분 DRAM을 사용하며,
SRAM은 가격이 높기 때문에 Cache memory 용도로 많이 사용된다.
CPU는 우리가 사용하는 I/O 장치(카메라, 마이크 등 외부장치)와 직접적으로 연결되어 있지 않고,
메모리와만 연결이 되어 있다.
메인보드를 확인하면, CPU가 연결되는 소켓과 메모리가 연결되는 소켓이 분리되어 있다.
하지만, 스마트폰과 같은 기기는 노트북, 데스크탑에 비해 콤팩트가 작기 때문에
CPU 따로 메모리 따로 구성하면 하드웨어를 구성하는데 어려워진다.
그래서 스마트폰은 CPU와 메모리를 원칩으로 만든다(ASIC 주문형 반도체).
일반적인 임베디드기기는 하나의 반도체 형태인 원칩을 사용한다.
애플리케이션 프로세서(Application Processor)는 특정 애플리케이션을 실행하기 위해 설계된 프로세서인데,
애플 실리콘(M3)이 AP 범주에 들어온다.
RAM은 휘발성(휘발유가 기화되는 것과 같다)으로 전원을 켜면 기억을 쌓지만,
전원을 끄면 RAM이 기억하는 모든 내용이 사라져 영구 보관이 불가하다.
I/O Device는 Memory와만 연결되어 있고, Memory와 I/O Device의 속도 차이를 줄이기 위하여 Memory 영역에 각 I/O Device를 위한 공간(I/O Buffer)을 설정하여 관리
표준 입/출력 장치에 해당하지 않는 장치는 I/O Device를 사용하기 위한 별도의 프로그램이 필요하고 해당 프로그램을 디바이스 드라이버라고 한다.
입출력 장치에는 키보드, 마우스, 모니터 등이 있다.
CPU가 가장 빠르며, 메모리, I/O 디바이스 순으로 빠르다.
그래서 전체적인 컴퓨터 속도는 I/O 디바이스에 의해 결정된다.
키보드 입력 > 키보드 퍼버 저장 > 프로그램 코드 입력 시 코드로 이동 or 데이터라면 데이로 이동
버퍼는 각 디바이스 마다 존재하며, 마우스 버퍼, 모니터 버퍼 모두 따로 존재한다.
모니터는 화면 크기를 갖는 버퍼다.
애플이 원칩으로 만든 목적이 바로 속도 때문인데,
외부장치로 연결하게 되면 발열이 심하고 속도가 느려진다.
원칩으로 만들면 CPU 코어와 메모를 결합하기 때문에 속도를 개선할 수 있다.
스마트폰은 콤팩트 자체가 작기 때문에 PC 처럼 만들기 어려워 ARM core라는 저전력 core를 사용한다.
특별한 장치 지정 없이도 입력을 받을 수 있는 장치를 표준입력장치라고 한다.
마우스 등은 표준입력장치가 아니며, 따로 지정하지 않으면 쓰지 못 한다.
standard input = stdin
숫자 0으로 써두면 표준입력장치로 인식한다.
python input() 함수를 사용할 때, 장치를 따로 지정하지 않는다.
standard out = stdout = 1 = 정상,
standard errorr = stderr = 2 = 에러
python print() 함수를 사용할 때, 장치를 따로 지정하지 않는다.
프로그래밍이나 서버 설정 시 해당 숫자를 많이 사용한다.
경우에 따라 장치를 바꿔야 할 때가 있으니 숫자를 기억해두자!
CPU는 ALU를 사용하여 연산하고,
GPU는 모니터에 결과를 출력 내용을 제어하는 전용 프로세서다.
과거에는 화면 색상이 흑백이었기 때문에 정보의 양이 많지 않은데,
최근에는 컬러(RGB) 방식을 사용하여 모니터에 출력해야 하는 양이 많아졌다.
컬러 기반의 게임이 활성화 되고, 2D에서 3D로 넘어가는 등 반응 속도가 중요해졌다.
점의 집합으로 모니터에 컬러를 출력하게하는 GPU는 고사양이 될 수록 점의 개수가 많아진다.
가로, 세로 점이 얼마나 있는지에 따라 픽셀이 정해지고 해상도로 이어진다.
1240px = 1240개 점 = 해상도
표준 RGB 보다 4배 높으면 4K, 8배면 8K
GPU는 단순 연산만 하며, 점을 찍기 위해 좌표를 필요로 한다.
이러한 구조가 딥러닝에 굉장히 적합하다.
머신러닝은 GPU 보다 CPU가 더 중요한데(메모리에 맞춰져도 CPU가 빠를 수록 좋다),
딥러닝은 단순 반복 연산이 필요하기 때문에 GPU가 필요한 것이다.
CPU는 명령을 하나 밖에 처리하지 못하지만(명령 10개 동시 진행 시 CPU 10개 필요, 하지만 비싸다),
GPU는 색상 정보와 좌표만 있으면 되기 때문에 단순 연산이 가능해지고,
GPU는 점을 하나하나 찍기 때무에 코어가 많아 병렬 연산이 가능하다.
딥러닝 프로그래밍할 때 프레임워크에 텐서플로우, 파이토치 중 사용하게 되는데,
텐서플로우가 지원하는 GPU는 엔디비아만 가능하다.
인텔은 연계가 되어 있지 않다(일반화가 안 됨).
LMN 대규모 언어 모델 훈련에서는 GPU가 몇 백장이 필요하다.
그래서 최근 딥러닝 전용 NPU (뉴럴 프로세스)가 등장했다.
GPU 보다 저렴하며, GPU는 목적이 딥러닝이 아니지만,
NPU는 딥러닝을 위한 용도로 목적이 하나다(아니면 추론 목적으로 사용).
딥러닝에서 기본적으로 GPU를 사용하지만, 연산 내용이 많지 않으면 CPU를 사용할 수 있다.
연산 내용이 많다면 GPU를 사용한다.
프로그램 (프로그램 코드/ 실행 가능 binary)/데이터 보관
O/S, Application, Data
HDD - 용량, 가격 장점
SSD (Solid State Drive) - 속도 장점
CPU 속도는 클럭 속도(헤르츠, 기가헤르츠)로 측정되며, 이는 초당 수행할 수 있는 연산의 수를 나타낸다.
반면, 네트워크의 속도는 대역폭에 의해 결정되며, 이는 네트워크를 통해 동시에 저장할 수 있는 데이터 양을 말한다.
클라우드를 사용한다면 기본적으로 네트워크가 필요하다,
네트워크를 구성하고 데이터 송수신을 처리하기 위해서는 NIC와 같은 하드웨어 디바이스가 필요한다.
NIC는 네트워크에 연결되고 데이터를 입출력하는 데 중요한 역할을 한다.
Memory는 휘발성이 있어 영구 보관이 안되므로,
보관을 목적으로 하는 보조 기억 장치(Storage, 스토리지)를 사용한다.
CPU와 I/O Device는 연결이 되어있지 않아 Memory를 거쳐야 한다.
하드웨어 중 I/O 디바이스가 가장 느려 I/O 디바이스에 의해 속도가 결정될 수 있으므로,
I/O 디바바이스도 속도가 빠른 것을 선택해야 하는데(마우스 등 은 상관 없음),
메모리 속도가 빠르더라도 용량이 적으면 속도가 저하될 수 있다.
특히, USB 장치에 속도차이가 있다.
현재 기준 썬더 볼트가 가장 빠르며, 썬더 볼트를 지원하는 컴퓨터에 해당 장치를 쓰면 빠른 성능을 지원할 수 있다.
HDD는 대용량 데이터를 저렴한 가격에 저장할 수 있지만, 속도가 SDD 보다 느리다.
SSD는 MAND 플래시 메모리를 지원하며, 속도가 빠르나 비용이 비싸다.
응용 프로그래매 데이터는 모두 보조 기억 장치에 저장된다.
OS 설치는 메모리가 아닌 스토리지에서 설정을 하며, 스토리지에 있는 OS가 메모리에 로드되어 실행된다.
컴퓨터 부팅 시 하드를 체크하고 메인 스토리지로 가서 OS를 찾는데, 이때 OS가 없다면 부팅이 되지 않는다.
그래서 ROM으로 부트로더를 읽어 운영체제를 찾고 RAM이 로드하여 운영체제를 실행한다.
입출력을 하지 않고 대용량 데이터를 오래 보관하고 싶다면 HDD를,
자주 읽거나 쓰기를 하면 SDD를 선택하는 것이 좋다.
스토리지는 중요하며, 스토리지 속도가 빠를 수록 좋다.
앞으로 클라우드 서버 구성에서 CPU 메모리 스토리지를 결정해야 한다.
클라우드는 사용 만큼의 비용이 책정되기 때문에 기본 비용을 어떻게 책정할 것인지 고민을 해야 한다.
즉, 어느정도의 속도와 금액을 타협해야 한다.
대용량 데이터 오래 보관하고 싶으면(입출력 안할거면) HDD
자주 읽기도하고 쓰기도 하면 SSD를 선택하는게 좋음
인프라를 구성하는데 하드웨어가 중요하고 향후 확장성을 고려해야 한다.
하드웨어 구성 시 CPU, 메모리, 스토리지, NIC(속도 중요)를 고려하여 인프라를 구축한다.
환경 구성에는 하드웨어를 중심으로 결정해야 한다.
스케일 업과 스케일 아웃은 동시에 진행하지 못한다.
클라우드는 온프레미스를 조금 더 유연하게 쓰기 위함이며, 소유 개념이 아니다.
클라우드는 비용이 가장 중요하며, 온프레미스 구성에 비해 클라우드 사용 요금이 더 나올 수 있다.