본문 바로가기

전체 글

(110)
머신러닝 공부 2 https://joyfulviper.tistory.com/117 이전 글에 이어서 이어서 공부합성 곱 신경망 (CNN)이렇게 Relu 를 통해 레이어를 여러개 쌓아도 각 레이어의 기여도가 죽지 않게 되었다. 또한 인터넷이라는 것의 존재가 기계가 학습할 대량의 데이터까지 제공을 해줬다. 또한 레이어가 깊어질수록 연산량이 많아지는데, gpu가 이 문제를 해결해줬다. 이러한 복합적인 사실이 AlexNet 이라는 깊은 신경망을 성공시켰다. 이는 이미지를 다루려고 만들어진 CNN이라는 특수한 구조를 가지고 있다. 이미지 같은 경우 픽셀 덩어리인데, 1000 x 1000 이미지 한장을 인풋으로 넣게 되면 100만픽셀짜리 데이터가 입력으로 들어가게 된다. 또한, 이미지라는 특성상 아래와 같은 문제를 낳는다.1. 가중..
GPU 관련 공부하다가 정리해놓은 이런저런 용어들 PCIE(Peripheral Component Interconnect Express) : cpu와 주변 장치를 잇는 통신 규격을 의미한다. 단위는 레인이라는걸 쓰는데 pcie의 세대가 올라갈수록 레인당 대역폭이 좀 커지긴 한다. * 레인의 개수에따라 x1, x4, x8, x16 이렇게 단위가 있다. 이 이야기를 왜하냐면 gpu와도 은근한 관련이 있기 때문이다. gpu 또한 cpu와 통신을 해야 한다. 근데 gpu마다 cpu와 통신할 때 요구하는 스펙이 다르다. 요즘 나온 것들은 대부분 gpu 1장이 요구하는 스펙이 x16이긴 하다. 근데 h100, a100 같은 것들은 머신 하나에 지피유가 8개 들어간다. 그러면 128 레인이 필요하게 되는데, cpu 하나의 pcie가 128이 되기는 기술적으로 꽤나 빡..
파일시스템과 디스크 일반적으로 백엔드 개발을 하면서 파일 시스템을 직접 설정하고 하드웨어를 고민하며 개발을 할일은 드물다. 나의 경우 운좋게 파일 시스템을 들여다 보고 디버깅 하는 경험이 생겼고, 알게된 이런저런 것들을 기록해봤다.cloud 환경에서 생성형 AI 모델을 서빙하기 위해서는 파일시스템에 대해 어느정도 알 필요가 있다. 컴퓨터가 부트스트래핑 될 때 매우 큰 모델 파일을 다운로드 받고, 메모리에 올리려면 어떤 하드웨어가 좋은지, 선택한 하드웨어를 쓸 수 있게 하려면 어떻게 해야할지 고민해야 한다. 그래서 오늘은 간단하게 파일시스템에 대해 이야기하고자 한다. 컴퓨터는 기본적으로 폰 노이만 구조를 따른다. CPU와 RAM이 긴밀하게 연결되어, RAM에 올라온 코드와 데이터를 CPU가 읽고 연산하는 구조다. 하지만 이 ..
머신러닝 공부 1 머신러닝도 처음부터 머신러닝이라는 이름을 갖지는 않았다.처음에는 Pattern Recognition 이라는 이름으로 나타났다. 예를 들어 꽃을 보고 이게 무슨 종류의 꽃인지 맞추려면 if문을 나열하는 것만으로는 어려울 것이다. 그래서 특정 데이터 셋을 보고 이런 특징이면 이런 꽃이구나를 판단하는 패턴을 찾아내는 것을 수학적으로 푼 논문이 1936년에 나오게 됐다.Pattern Recognition이 논문이 발표된 후 나온게 인공 뉴런이라는 것이다. 분류를 사람이 하는 것 처럼 정교하게 하기 위해서 나온 것이다. 왜 뉴런이냐 하면은 사람이 무언가를 인식하고 판단할 때 뉴런들이 하고, 이 뉴런이라는걸 수학적으로 흉내내면 기계도 가능하지 않을까? 라는 아이디어로 시작하게 됐다. 이를 수식으로 만들려면 뉴런이 ..
api의 보안 최근 인증 서비스를 개발하고, isms-p 인증을 위한 이런저런 이슈를 처리하며, 보안에 대한 생각을 하게 되었다. api는 클라이언트가 서버의 자원에 접근 할 수 있는 가장 쉬운 방법이다. 브라우저의 개발자 도구만 조금 다룰줄 안다면 서버가 어떤 구조로 요청을 받고 있는지 알 수 있고, 이 구조를 통해 취약점을 찾을수도 있다.또한, 서버의 입장에서는 지금 요청을 한 클라이언트가 이 api를 사용할 수 있는 의도한 클라이언트인지, 악의적인 클라이언트일 때 개발자가 인지 가능한지, 인지를 한다면 어디까지 정보를 알아서 어떻게 로그를 남기고 알림 시스템은 어떻게 활용할지 생각하며 해커의 입장이 되어 api를 설계할 필요가 있다.인증 처리일반적으로, api를 열어줄 때 요청 사용자가 누구인지, 해당 api를 ..
프로세스 vs 스레드 프로세스(Process)와 스레드(Thread)란?운영체제에서 프로세스(Process)는 실행 중인 프로그램의 인스턴스다. 각 프로세스는 독립된 메모리 공간(코드, 데이터, 힙, 스택)을 운영체제로부터 할당받아 실행된다. 프로세스 간에는 기본적으로 메모리를 공유하지 않기 때문에, 한 프로세스가 비정상 종료되더라도 다른 프로세스에 영향을 주지 않는다. 스레드(Thread)는 프로세스 내에서 실행되는 흐름의 단위다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 같은 프로세스 내의 스레드들은 메모리를 공유한다. 스택 영역만 각 스레드가 독립적으로 가진다. 메모리를 공유하기 때문에 스레드 간 통신은 빠르지만, 반대로 하나의 스레드에서 문제가 발생하면 같은 프로세스 내 모든 스레드에 영향을 미칠 수 있다. ..
스프링 부트로 빌드된 jar 의 구조 최근 그래들 태스크에 프로젝트의 자바 코드를 그래들 태스크에서 사용해야 하는 상황이 있었다.  아래와 같은 코드이다. 간단하게 설명하자면 프로젝트의 소스코드를 그래들 태스크에서 불러와서 main 함수를 실행하는 스크립트이다. (실제 코드는 제공할 수 없어서 대체 코드로 작성했다.)tasks.register("docGenerateTask", JavaExec) { group = "documentation" description = "대충 문서화" def outputDir = "src/main/doc" classpath = sourceSets.main.runtimeClasspath mainClass = 'org.testt.Main' args = [outputDir]} publi..
Java의 SPI(Service Provider Interface)와 응용 Java 6에 추가된 기능인 SPI는 정말 유용한 기능임에도 불구하고 많은 사람들이 이 기능 자체를 모르고 있다.이 글에서는 SPI에 대해 간단하게 소개하고, SPI의 개념을 어떻게 스프링에 응용할 수 있는지 살펴볼 것이다. 아래 코드는 자바에서 기본적으로 읽고 쓸 수 있는 이미지 포맷이다.public class Main { public static void main(String[] args) { System.out.println("Readers:"); for (String s : ImageIO.getReaderFormatNames()) { System.out.print(s + ","); } System.out.println();..