반응형

출처: https://kyumdoctor.co.kr/18

 

nvidia-docker GPU 할당하여 사용 하는 방법 3가지

nvidia-docker 사용법

이전 포스팅에서 docker 설치 및 컨테이너 실행 옵션에 대해서 알아보았는데요. 오늘은 이어서 nvidia-docker에 대해서 적어보고자 합니다. nvidia-docker GPU 할당하여 사용 하는 방법은 굉장이 간단한데요. 

docker와 사용방법은 같은데요. 일반 docker와는 달리 nvidia driver 및 toolkit들을 사용하여 GPU를 사용할 수 있게 해주는 nvidia-docker는 설치 방법은 docker설치와 별반 다를게 없습니다. 

 

혹시 이전 Docker 설치 방법 및 실행 옵션에 대해 궁금하시다면 아래 포스팅을 참고 해주세요.

 

https://kyumdoctor.co.kr/16 

 

Docker 설치 및 컨테이너 실행 옵션 사용방법

Docker 설치 및 컨테이너 실행 옵션 사용방법 Docker? nvidia-docker2? 이번 포스팅에서는 Docker에 대해 알아보려고 합니다. 사실 이미 오래전부터 사용되었던 Docker이지만 모르는 분들을 위한 글이기

kyumdoctor.co.kr

 

nvidia-docker 설치 방법

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

gpgkey 입력 및 stable 저장소 추가 후 

 

# apt-get update
# apt-get install nvidia-docker2 -y
# systemctl restart docker

위와 같이 repository update 및 nvidia-docker2 를 설치 후 docker restart 후 간단하게 설치가 완료 됬습니다.

 

이제 NVIDIA-GPU를 할당하여 사용하는 방법 3가지에 대해서 알아보도록 하겠습니다.

 

 

 

시작하기 전에 저의 nvidia-smi 값을 먼저 보고 아래 글을 천천히 읽어주시면 될 것 같습니다.

# nvidia-smi

 

1. NV_GPU

# NV_GPU=0,1 nvidia-docker run -it \
nvcr.io/nvidia/tensorflow:20.12-tf1-py3

제 시스템은 슈퍼마이크로 4124-TNR 모델 A100 GPU 8ea를 사용중인데요.

그 중에 2개만 할당하기 위해서는 NV_GPU=0,1 의 옵션을 사용하여 nvcr.io/nvidia/tensorflow:20.12-tf1-py3 이미지를 사용하여 container에 진입하여 확인 하였습니다.

 

그렇다면 다른 옵션은 없을까요? 다른 방법으로도 GPU를 할당하여 사용하는 방법을 알려드릴께요.

 

 

 

2. NVIDIA_VISIBLE_DEVICES

# docker run -it --runtime=nvidia -e \
NVIDIA_VISIBLE_DEVICES=2,3 \
nvcr.io/nvidia/tensorflow:20.12-tf1-py3

runtime=nvidia를 사용하여 -e 환경변수로 NVIDIA_VISIBLE_DEVICES=2,3 GPU ID 혹은 UUID등으로 설정하여 GPU를 할당 하실 수 있습니다.

기존 NV_GPU와는 다르게 nvidia-docker로 시작하는 커맨드가 아닌 docker로 시작하는 command이니 잘 기억해 두시기 바랍니다.

또한 비교가 되기 위해서 NV_GPU 와는 다른 GPU를 사용하였는데요. 위 NV_GPU 사진에서 Bus-Id와 현재 NVIDIA_VISIBLE_DEVICES를 비교해 보시면 각각 다른 GPU를 사용한걸 아실 수 있습니다.

 

3. --gpus

# docker run -it --gpus '"device=0,1,2,3"' \
nvcr.io/nvidia/tensorflow:20.12-tf1-py3

다음으로는 gpus 옵션을 사용하는 것입니다.

gpus옵션을 사용하기 위해서는 위와 같이 docker run으로 시작하는데요. --gpus 뒤에 '"device="' 옵션에서는 큰 따옴표와 작은 따옴표가 반드시 필요합니다.

 

 

 

마지막으로  GPU를 한번에 다 사용하기 위해서는 --gpus all 이라는 옵션을 간단하게 사용하면 아래와 같이 모든 GPU를 할당하여 컨테이너로 진입하게 됩니다.

 

# docker run -it --gpus all \
nvcr.io/nvidia/tensorflow:20.12-tf1-py3

 

NV_GPU ? NVIDIA_VISIBLE_DEVICES? gpus?

이제 nvidia gpu 할당을 잘 하실수 있으실텐데요. NV_GPU와 NVIDIA_VISIBLE_DEVICES 및 gpus 차이점은 어떤 차이가 있는지 궁금하신 분들이 있으실텐데요.

nvidia-docker2가 설치가 되어 있는 상태에서는 어떠한 command로도 사용가능합니다.

다만 차이점은 아래와 같습니다.

 

NV_GPU = nvidia-docker

NVIDIA_VISIBLE_DEVICES = nvidia-docker2

gpus '"device="' = nvidia-docker2

 

nvidia-docker 버전의 차이기 때문에 상위버전은 하위호환되기 때문에 편하신 커맨드를 이용하셔서 docker를 사용하시면 될 것 같습니다.

 

해당 TEST 서버는 아래와 같습니다.

kyumdoctor.co.kr/12

반응형

'머신러닝' 카테고리의 다른 글

nvida gpu 분할 할당  (0) 2022.03.18
nvidia GPU 관련 확인 명령어  (0) 2022.03.18
머신러닝 텍스트 데이터 변형 프로세스  (0) 2022.03.18
반응형

출처 : http://choesin.com/docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%ED%95%A8%EA%BB%98-nvidia-gpu%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-kubernetes-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

 

Docker 컨테이너는 시스템의 GPU를 자동으로 보지 않습니다. 이로 인해 기계 학습 프레임워크와 같은 GPU 종속 워크로드에서 성능이 저하됩니다. 호스트의 NVIDIA GPU를 컨테이너에 노출하는 방법은 다음과 같습니다.

 

GPU가 Docker에서 작동하도록 만들기

Docker 컨테이너는 호스트의 커널을 공유하지만 자체 운영 체제 및 소프트웨어 패키지를 가져옵니다. 이는 GPU와 인터페이스하는 데 사용되는 NVIDIA 드라이버가 없음을 의미합니다. Docker는 기본적으로 컨테이너에 GPU를 추가하지 않으므로 일반 docker run 하드웨어가 전혀 표시되지 않습니다.

높은 수준에서 GPU가 작동하도록 하는 것은 이미지 내에 드라이버를 설치한 다음 런타임에 컨테이너에 GPU 장치를 추가하도록 Docker에 지시하는 2단계 절차입니다.

이 가이드는 최신 버전의 CUDA 및 Docker에 중점을 둡니다. NVIDIA Container Toolkit의 최신 릴리스는 CUDA 10 및 Docker Engine 19.03 이상의 조합을 위해 설계되었습니다. CUDA, Docker 및 NVIDIA 드라이버의 이전 빌드에는 추가 단계가 필요할 수 있습니다.

NVIDIA 드라이버 추가

Docker 구성을 계속하기 전에 호스트에서 NVIDIA 드라이버가 제대로 작동하는지 확인하십시오. 성공적으로 실행할 수 있어야 합니다. nvidia-smi GPU의 이름, 드라이버 버전 및 CUDA 버전을 확인하십시오.

광고

GPU를 Docker와 함께 사용하려면 먼저 NVIDIA Container Toolkit을 호스트에 추가하십시오. 이는 Docker 엔진에 통합되어 GPU 지원을 위해 컨테이너를 자동으로 구성합니다.

예제 명령을 사용하여 툴킷의 패키지 저장소를 시스템에 추가하십시오.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - 
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

다음 설치 nvidia-docker2 호스트의 패키지:

apt-get update
apt-get install -y nvidia-docker2

Docker 데몬을 다시 시작하여 설치를 완료합니다.

sudo systemctl restart docker

이제 Container Toolkit이 작동해야 합니다. 테스트 컨테이너를 시작할 준비가 되었습니다.

GPU 액세스로 컨테이너 시작

Docker는 기본적으로 시스템의 GPU를 제공하지 않으므로 다음을 사용하여 컨테이너를 생성해야 합니다. --gpus 하드웨어가 표시되도록 플래그를 지정합니다. 활성화하거나 사용할 특정 장치를 지정할 수 있습니다. all 예어.

그만큼 nvidia/cuda 이미지는 CUDA 바이너리 및 GPU 도구로 사전 구성됩니다. 컨테이너를 시작하고 nvidia-smi GPU의 액세스 가능 여부를 확인하는 명령입니다. 출력은 사용할 때 본 것과 일치해야 합니다. nvidia-smi 당신의 호스트에. CUDA 버전은 호스트 및 선택한 컨테이너 이미지의 툴킷 버전에 따라 다를 수 있습니다.

docker run -it --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi

기본 이미지 선택

중 하나를 사용하여 nvidia/cuda 태그는 GPU 워크로드를 Docker에서 실행하는 가장 빠르고 쉬운 방법입니다. 다양한 변형을 사용할 수 있습니다. 운영 체제, CUDA 버전 및 NVIDIA 소프트웨어 옵션의 매트릭스를 제공합니다. 이미지는 여러 아키텍처용으로 빌드됩니다.

각 태그의 형식은 다음과 같습니다.

11.4.0-base-ubuntu20.04
  • 11.4.0 – CUDA 버전.
  • base – 이미지 풍미.
  • ubuntu20.04 – 운영 체제 버전.
광고

세 가지 다른 이미지 맛을 사용할 수 있습니다. 그만큼 base image는 필수 CUDA 런타임 바이너리가 포함된 최소 옵션입니다. runtime GPU 간 통신을 위한 CUDA 수학 라이브러리 및 NCCL을 포함하는 보다 완전한 기능을 갖춘 옵션입니다. 세 번째 변형은 devel 그것은 당신에게 모든 것을 제공합니다 runtime 사용자 정의 CUDA 이미지를 생성하기 위한 헤더 및 개발 도구뿐만 아니라

이미지 중 하나가 효과가 있으면 이를 기반으로 사용하는 것을 목표로 삼으십시오. Dockerfile. 그런 다음 일반 Dockerfile 지침을 사용하여 프로그래밍 언어를 설치하고 소스 코드를 복사하고 애플리케이션을 구성할 수 있습니다. 수동 GPU 설정 단계의 복잡성을 제거합니다.

FROM nvidia/cuda:11.4.0-base-ubuntu20.04
RUN apt update
RUN apt-get install -y python3 python3-pip
RUN pip install tensorflow-gpu

COPY tensor-code.py .
ENTRYPONT ["python3", "tensor-code.py"]

다음을 사용하여 이 이미지를 빌드하고 실행합니다. --gpus 플래그는 GPU 가속으로 Tensor 워크로드를 시작합니다.

수동으로 이미지 구성

다른 기반을 선택해야 하는 경우 이미지에 CUDA 지원을 수동으로 추가할 수 있습니다. 이를 달성하는 가장 좋은 방법은 공식 NVIDIA Dockerfile을 참조하는 것입니다.

CUDA 패키지 리포지토리를 추가하는 데 사용된 지침을 복사하고 라이브러리를 설치하고 경로에 연결합니다. CUDA 버전 및 운영 체제에 따라 다르기 때문에 이 가이드의 모든 단계를 재현하지는 않습니다.

Dockerfile 끝에 있는 환경 변수에 주의하십시오. 이는 이미지를 사용하는 컨테이너가 NVIDIA Container Runtime과 통합되는 방식을 정의합니다.

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
광고

CUDA가 설치되고 환경 변수가 설정되면 이미지가 GPU를 감지해야 합니다. 이렇게 하면 이미지 내용을 더 잘 제어할 수 있지만 새 CUDA 버전이 출시되면 지침을 조정할 수 있습니다.

어떻게 작동합니까?

NVIDIA Container Toolkit은 Docker와 같은 컨테이너 런타임을 호스트의 NVIDIA 드라이버에 대한 인터페이스로 래핑하는 패키지 모음입니다. 그만큼 libnvidia-container 라이브러리는 런타임 래퍼를 통해 시스템의 GPU를 컨테이너에 자동으로 제공하는 API 및 CLI를 제공하는 역할을 합니다.

그만큼 nvidia-container-toolkit 구성 요소는 컨테이너 런타임을 구현합니다. prestart 훅. 즉, 새 컨테이너가 시작되려고 할 때 알림을 받습니다. 연결하려는 GPU를 확인하고 호출합니다. libnvidia-container 컨테이너 생성을 처리합니다.

후크는 다음에 의해 활성화됩니다. nvidia-container-runtime. 이는 NVIDIA가 다음을 보장하도록 containerd 또는 runc와 같은 “실제” 컨테이너 런타임을 래핑합니다. prestart 후크가 실행됩니다. 기존 런타임은 후크가 실행된 후 컨테이너 시작 프로세스를 계속합니다. 컨테이너 툴킷이 설치되면 Docker 데몬 구성 파일에서 선택한 NVIDIA 런타임이 표시됩니다.

요약

Docker 컨테이너 내에서 NVIDIA GPU를 사용하려면 호스트에 NVIDIA Container Toolkit을 추가해야 합니다. 이것은 NVIDIA 드라이버를 컨테이너 런타임과 통합합니다.

부름 docker run 와 더불어 --gpu 플래그는 컨테이너에서 하드웨어를 볼 수 있도록 합니다. Container Toolkit을 설치한 후 실행하는 각 컨테이너에서 설정해야 합니다.

광고

NVIDIA는 애플리케이션의 빠른 시작으로 사용할 수 있는 사전 구성된 CUDA Docker 이미지를 제공합니다. 더 구체적인 것이 필요하면 공식 Dockerfiles를 참조하여 Container Toolkit과 여전히 호환되는 자신만의 것을 조립하십시오.

반응형
반응형

출처 : https://techblog-history-younghunjo1.tistory.com/110?category=924148

비정형 데이터가 어떤 과정으로 머신러닝 모델에 input 으로 들어가는지

1) 클린징 과정을 거쳐 데이터셋을 보기좋게 정제

2) 데이터 정규화 

    2-1) 토큰화

    2-2) 필터링 / 불용어 제거 / 오타수정

    2-3) 어근(단어의 원형)  추출

  • 토큰화(Tokenization) : 문서를 문장 단위로, 문장을 단어 단위로 쪼개는 것을 말한다. 주로 사용되는 방법으로 N-gram 방법이 있는데 N-gram에 대한 개념은 여기를 참고하자.
  • 필터링, 불용어 제거, 철자 수정 : 말 그대로 불필요한 단어 즉, 텍스트로부터 주요한 정보를 얻는 것에 영향을 미치지 않는 단어들을 제거한다. 영어의 불용어에 대한 예시로는 'he', 'is', 'will' 등이 되겠다.
  • 어근 추출 : Stemming이라고도 한다. 또 다른 방법으로는 Lemmatization 방법도 존재하는데, 이 두개 중 Lemmatization이 더욱 더 정교한 방법이다. 정교하다란, 예를 들어, classifies 라는 단어의 어근을 추출할 때 Stemming은 단순히 어미를 제거해 classif 라고 어근을 추출하지만 Lemmatization은 classify로 제대로 어근을 추출한다.(물론 classifies를 실제로 수행해본 것은 아니니 Lemmatization이 더욱 더 정교한 방법이라는 주장에 힘을 실어줄 가상의 예시일 뿐이다.)

그런데...어떻게 텍스트 데이터를 숫자형태로 바꾸어서 머신러닝 모델이 알아듣도록 변형하지???? @..@;;;

    3) 텍스트를 숫자로 변형해 주는 과정인 피처 벡터화(Feature Vectorizer) 수행

    4) 위의 데이터를 머신러닝 input 데이터로 집어넣기 위해 적절한 모델 설정

    5) 학습/검증/테스트 데이터를 분할하이퍼라미터 튜닝

    6) 모델 성능 평가

 

반응형

'머신러닝' 카테고리의 다른 글

nvida gpu 분할 할당  (0) 2022.03.18
nvidia-docker GPU 할당하여 사용 하는 방법 3가지  (0) 2022.03.18
nvidia GPU 관련 확인 명령어  (0) 2022.03.18
반응형

딥러닝/머신러닝 관련 cpu , gpu 관련 정리된 좋은 글이 있어서 정보 저장 차원에서 퍼옵니다.

(출처 :  https://velog.io/@euisuk-chung/CPU%EC%99%80-GPU )

 

CPU와 GPU

우리가 통상적으로 딥러닝과 머신러닝을 할때 코드로 아래와 같이 쉽게 CPU를 사용할지 GPU를 사용할지 정해주곤 합니다.

import torch

# CUDA 사용여부
USE_CUDA = torch.cuda.is_available()
print(USE_CUDA)

# device 선언
device = torch.device('cuda:0' if USE_CUDA else 'cpu')

하지만, 막상 "CPU는 직렬연산이고, GPU는 병렬연산이니까 딥러닝은 GPU야!"라는 단순한 기본 지식말고는 아무것도 모르고 있다는 것을 자각하여 오늘은 "과연 CPU와 GPU는 어떠한 차이가 있을까?" 라는 주제로 포스팅을 해볼 예정입니다.

CPU와 GPU 그래서 그게 뭔데?

CPU와 GPU는 둘 다 데이터를 읽어들여 연산처리를 통해 답을 도출하는 기능을 수행하나, 이름과 구조에서 알수 있듯이 중앙 처리 장치(CPU)와 그래픽 처리 장치(GPU)는 역할이 매우 다릅니다.

  • 중앙 처리 장치(CPU, Central Processing Unit)
  • 그래픽 처리 장치(GPU, Grapical Processing Unit)

CPU·GPU와 같은 프로세서 내부는 크게 연산을 담당하는 산출연산처리장치(ALU, Arithmetic Logic Unit)와 명령어를 해석·실행하는 컨트롤유닛(CU, Control Unit), 각종 데이터를 담아두는 캐시(Cache)로 나뉘게 됩니다. 각각 하나씩 살펴보도록 하겠습니다.

CPU란,

CPU는 입출력장치, 기억장치, 연산장치를 비롯한 컴퓨터 리소스를 이용하는 최상위 계층 장치로써, 컴퓨터의 두뇌를 담당합니다. CPU는 컴퓨터 및 운영 체제에 필요한 명령과 처리를 실행하므로 모든 현대 컴퓨팅 시스템에 필수적인 요소입니다.

CPU는 명령어가 입력된 순서대로 데이터를 처리하는 순차적인(Sequential) 처리 방식에 특화된 구조를 가지고 있습니다. 이는 한 번에 한 가지의 명령어만 처리한다는 것을 의미하며, 그렇기에 연산을 담당하는 ALU의 개수가 많을 필요가 없게 됩니다. 예를 들어 CPU 제품들 중 Octa-core CPU의 경우에는 코어 당 1개씩, 총 8개의 ALU가 탑재되어 있는 제품입니다.

CPU 내부의 절반 이상은 캐시 메모리로 채워져 있습니다. 캐시 메모리는 CPU와 램(RAM)과의 속도차이로 발행하는 병목현상을 막기 위한 장치로써, CPU가 처리할 데이터를 미리 RAM에서 불러와 CPU 내부 캐시 메모리에 임시로 저장해 처리 속도를 높일 수 있게 됩니다. CPU가 단일 명령어를 빠르게 처리할 수 있는 비결도 바로 이 캐시 메모리 때문이라고 할 수 있습니다.

GPU란,

여기서 잠깐! 그렇다면 "딥러닝을 학습할때 GPU를 쓰면 무조건 성능이 좋다그러던데 그럼 GPU가 CPU보다 빠르고, 좋은거 아닌가?" 라는 의문점을 품는 이들이 있을 것입니다.

일반적으로 범용 컴퓨팅 측면에서 CPU는 GPU보다 훨씬 더 성능이 좋다고 할 수 있습니다. CPU는 GPU에서 발견되는 것보다 더 높은 클럭 속도(aka 주파수)를 가진 더 적은 수의 프로세서 코어 로 설계되어 일련의 작업을 매우 빠르게 완료 할 수 있기 때문입니다.

하지만, 딥러닝 학습 측면에서는 GPU가 CPU보다 좋다고 할 수 있습니다.(무조건은 X) GPU에 대해 알아볼까요? GPU는 CPU에 비해 훨씬 더 많은 수의 코어를 가지고 있으며 애초에 설계도 다른 목적으로 만들어졌습니다. 최초의 GPU는 이름에서 알수 있다시피 그래픽 처리 장치로써, 그래픽 렌더링의 성능을 가속화하도록 설계되었습니다.

CPU와 GPU의 발전을 간단하게 소개를 안 할 수가 없을 것 같은데요. 아주 좋은 설명이 있어서 링크 걸어두겠습니다. (링크 : 그래픽 카드 이야기) 본 영상을 요약하자면, 기존의 CPU는 컴퓨터가 하는 모든 일을 조종/통제해왔습니다. 그러나 점점 기술이 발전하면서 GUI(Graphical User Interface) 등의 다양한 로드가 추가 되었고, 이는 CPU의 성능 저하로 이어져 CPU가 제때 제때 중요한 연산을 못하게 되었습니다. 그러자 이제 개발자들은 간단한 연산들(ex. 그래픽 작업)은 다른 Processing Unit에게 맡기고 기존의 중요한 일을 CPU에게 맡기도록 하자는 아이디어가 나왔고 그것이 바로 GPU의 탄생이 되게 됩니다.

이렇게 CPU의 부담스러운 계산을 GPU가 오프로드해줌으로써 처리 능력을 확보 할 수 있도록함으로써 계속해 발전되어 왔습니다. CPU는 GPU를 포함한 시스템의 나머지 부분에 지침을 제공하는 작업의 두뇌로, GPU는 병렬 처리 아키텍처로 인해 CPU보다 이미지 렌더링에 최적화되어 발전되어 왔습니다. 요약하자면, CPU는 어려운 문제를 푸는데 특화된 소수 정예 싱글코어, 그리고 GPU는 쉬운 문제를 동시에 푸는 데 특화된 인해전술 멀티코어라고 보면 될거 같습니다.

기존의 CPU가 순차적인 처리 방식에 특화되어 있었다면, GPU는 병렬적인(Parallel) 처리 방식에 특화되어 있으며 이로 인해 반복적이고 비슷한 대량의 연산을 수행하는 데에 있어서 속도가 빠릅니다. GPU는 더 작고 보다 전문화된 여러개의 코어로 구성된 프로세서입니다. 여러 개의 코어가 함께 작동하므로, 여러 코어로 나누어 처리할 수 있는 작업의 경우 GPU가 엄청난 성능 이점을 제공합니다. 기존의 CPU가 6-8개의 코어로 구성되어 있다면, GPU는 어떤 GPU인가에 따라 많이 상이하지만 적게는 수백개에서 많게는 수천개의 코어로 구성되어 있습니다.

Source : https://kr.nvidia.com/object/what-is-gpu-computing-kr.html

우리가 딥러닝을 생각해보면 대부분이 벡터나 행렬 연산으로 이루어져있다고 해도 과언이 아닌데요. 이러한 잘 나누어지는 계산, 즉 병렬성이 극대화된 계산은 GPU가 이미 해오던 연산으로, GPU를 딥러닝 연산에 사용하게 됨으써 CPU보다 더 빠르고 최적화된 연산을 수행하게 됬다고 보시면 될 것 같습니다.

실험해봅시다!

다음은 속도 비교를 위해 간단하게 코드로 연산 및 처리 속도를 비교해 본 것인요.

단순한 상수 연산을 수행할 때 각각 CPU는 5.84ms, GPU는 42.8ms가 나온 것을 통해 우리는 CPU가 하나의 연산을 수행함에 있어서 더 우수한 것을 볼 수 있습니다. 반면에 10000 by 10000 행렬연산을 수행하는 데 있어서는 CPU는 13.7s, GPU는 785ms인 것을 통해 GPU가 병렬 연산을 하는데 있어서 더 빠른 것을 직접적으로 확인해 볼 수 있습니다.

이상으로 오늘 포스팅 마치도록 하겠습니다 ^~^

긴 글 읽어주셔서 감사합니다!

반응형
반응형

뭐라 형용할 수 없는 답답함이 마음 한구석에 있다.

분노와 상실감 ...

 

휴... 

반응형
반응형

 

 

JPA(Java Persistent API)란

 -JPA 는 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.

 - java에서 DB를 건드려서 데이터 핸들링 하려고 할 경우 보통은 아래 3가지 형태로 가능하다.

    (크게 나눠서는 Persistent Framework를 사용하거나 아님 생짜로 DB 접속 이고, 세부적으로는 주로 3가지임)

    직접 핸들링) jdbc(java Database Connectivity)를  사용하여 DB에 접속 

    Mapper 핸들링) SQL Mapper 를 활용하여 DB에 접속

                    - SQL문을 직접 명시하고, Mapper를 통해 매개변수를 맵핑하여 DB를 핸들링함

    ORM) Object-Relation Mapping . 즉, 객체와의 관계를 통한 맵핑

                   - DB Table을 java Object 로 맵핑하여 객체간의 관계를 통하여 SQL문을 자동생성하여 DB를 핸들링함

                   - Method를 통해 데이터를 조작함

Hibernate란

  - jpa 구현체 중에 한가지임

  - jpa는 자바객체와 DB를 맵핑하기 위한 API를 제공하고,  Hibernate는 이 API(인터페이스)를 구현한 것임

 

반응형

'Java기초' 카테고리의 다른 글

poi  (0) 2022.11.24
Java Garbage Collection (펌)  (0) 2015.12.16
gc g1  (0) 2015.12.10
gc 방식  (0) 2015.12.10
gc 후 메모리 사용순서  (0) 2015.12.10
반응형
반응형
반응형
Docker 명령어  
docker container commit container 로 부터 image를 작성할때
>docker container commit -a "reo" testServer reo/web:1.0
docker container export 가동중인 컨테이너의 디렉토리/파일 들을 모아서 tar파일로 만들때
>docker contaier export reodserver > reotest.tar
docker image import linux os 의 디렉토리/파일 로 부터 도커 이미지를 만들때
>docker 
   
   
반응형
반응형

출처: https://wnsgml972.github.io/network/network_cloud-computing.html

 

Iaas, paas, saas 차이를 너무 잘 정리해 놓은 글이 있어 보관차원에서 퍼옵니다.

 

IaaS, PaaS, SaaS란 무엇인가?

정리

  • 클라우드 컴퓨팅이 도입되면서 최근에 자주 들을 수 있는 용어입니다.
  • IT 인프라의 여러 필요한 구성 요소 중 예전에는 모두 사용자가 관리해야만 했지만, 이제는 일정 부분을 클라우드에서 내려받는 형태가 많이 도입되었습니다.
  • 얼마만큼 사용자가 관리하고 얼마만큼 클라우드에서 제공받는가에 따라 다음과 같이 네 가지로 나누어져 있습니다.
  • 위의 그림에서 보이는 데로 노란색의 You manage는 사용자가 관리해야 할 부분이고, 흰색의 Managed by vendor는 기업(클라우드)에서 관리해주는 부분입니다.

 

Packaged Software

그림에서 보이는 것과 같이 직접 인프라와 플랫폼, 어플리케이션까지 모두 구성하여 관리하는 모델을 의미합니다.

정리

  • 물리적인 장치, 하드웨어(CPU, RAM, Storage, Network device 등등)을 모두 직접 구매해야 합니다.
  • 직접 OS를 설치해야 합니다.
  • 네트워크 환경을 직접적으로 구성해야 합니다.
  • 서버 관리를 직접적으로 해야 합니다. (트래픽, 프로지버닝 등등)
  • 이런 모든 것을 직접 사용자가 다 준비해야 하기 때문에 매우 큰 시간과 돈을 소비하게 됩니다.

 

IaaS(Infrastructure as a service)

Infrastructure 레벨을 제공하는 서비스를 의미합니다. 위에 보이는 것과 같이 사용자는 OS를 직접 올리고 그 상위 계층만 구성하면 되는 모델입니다.

정리

  • 우리가 자주 사용하는 가상 호스팅(VM Hosting)과 비슷하나 처음에 말했다시피, 가상 호스팅은 우리가 직접 장비를 사서 그 장비의 한에서 자원을 할당하고 구성해야 하지만, IaaS는 기업이 준비해놓은 환경에서 우리가 선택할 수 있다는 점에서 차이가 있습니다.
  • 일반적으로 적은 OS가 지원됩니다. (아마존은 일부 Linux와 Windows Server 제공)
  • 고객은 OS와 어플리케이션을 직접 관리해야 합니다.
  • 관리 측면에서 개발자와 인프라 관리자의 역할을 분담시킬 수 있습니다.

장점

  • 고객은 가상 서버 하위의 레벨에 대해서는 고려할 필요가 없다는 장점이 있습니다.

단점

  • 그러나 역설적으로 IT 부서(특히, 운영부서)에서 느끼는 매우 큰 단점은 바로 가상 서버 하위의 레벨에 대해서는 전혀 고객이 접근하거나 컨트롤할 수 없습니다.
  • 결국, 가상 서버 하위의 레벨에 대해서 고려할 필요가 없는 사용자가 쓰기에 적합한 모델입니다.

예시

AWS의 EC2

  • AWS의 EC2를 이용하면 우리는 물리적인 서버와 Network, Storage 등등을 직접 구매하거나 준비하지 않아도 원하는 OS를 깔아 서버로 사용할 수 있습니다.
  • AWS의 EC2는 사용자가 원하는 OS를 고르고 그에 해당하는 스펙을 선택하기만 하면, 모든 관리를 아마존에서 해주는 것입니다. OS를 제공한다는 느낌이긴 하지만, 선택권을 주고 OS의 종류나 다양한 자원들을 사용자가 선택하므로 대표적인 IasS라고 불리고 있습니다.

제가 이번에 만든 오픈소스 Mosquitto를 이용한 MQTT Broker를 아마존의 EC2에 올려서 사용하고 있는데 매우 편리합니다.
1년간은 프리티어로 사용할 수 있으니 관심 있으신 분은 한번 해보시는 게 좋은 것 같습니다.

사용자

  • AWS 처럼 직접 기업이 클라우드를 운영하고 사용자인 우리가 서비스를 받는 AWS EC2 같은 것이 이에 해당합니다.

제공자

  • 직접 클라우드를 구성할 수 있는 OpenStack이라는 오픈 소스도 IaaS에 해당합니다. 서비스를 제공 받는 입장이 아닌 제공하는 인프라를 구성할 수 있는 오픈 소스입니다.
  • OpenStack에 관한 게시글은 다음 포스팅에 다루도록 하겠습니다.

 

PaaS(Platform as a service)

개발자가 응용 프로그램을 작성할 수 있도록 플랫폼 및 환경을 제공하는 모델입니다.

정리

  • 운영 팀이 인프라를 모니터링할 필요가 없습니다.
  • 사용자는 OS, Server 하드웨어, Network 등등을 고려할 필요가 없습니다.
  • 사용자는 어필리케이션 자체에만 집중할 수 있습니다. 즉 개발자는 빠르게 어플리케이션을 개발하고 서비스 가능하게 할 수 있습니다.
  • IaaS와 헷갈릴 수 있는데 아마존과 같은 서비스가 VM을 제공하는 IaaS라면, PaaS는 node.js, Java와 같은 런타임을 미리 깔아놓고, 거기에 소스코드를 넣어서 돌리는 구조입니다. 다시 한번 얘기하면 우리는 소스코드만 적어서 빌드 하는 것이고, 컴파일은 클라우드에서 하여 결과만 가져오는 거라고 생각하시면 됩니다.

장점

  • PaaS의 경우 이미 설치된 미들웨어 위에 코드만 돌리면 되기 때문에, 아무래도 관리가 매우 편리합니다.
  • 가장 이상적인 어플리케이션 플랫폼 관점의 클라우드 모델로 업계에 받아들여지고 있습니다.

단점

  • 이것도 IaaS와 마찬가지로 하나의 인프라를 기반으로 개발할 수 있다는 것 자체가 장점이자 단점이 될 수 있습니다.
  • PaaS는 기본적으로 어플리케이션과 플랫폼이 함께 제공됩니다. 어플리케이션이 플랫폼에 종속되어 개발되기 때문에 다른 플랫폼으로의 이동이 어려울 수도 있습니다.

예시

  • PaaS의 제공 업체로는 Heroku, Google App Engine, IBM Bluemix, OpenShift, SalesForce가 있습니다.

 

SaaS(Software as a service)

설치할 필요도 없이 클라우드를 통해 제공되는 SW입니다.

정리

  • 위의 그림에서 보이는 것처럼 모든 것을 기업(클라우드)에서 제공함으로 사용자는 별도의 설치나 부담이 필요 없이 SW를 사용할 수 있습니다.
  • SaaS는 소비 관점에서 제공되는 IT 방식의 서비스로 정리할 수 있습니다. 구독의 방식으로 돈을 벌거나 트래픽 기반으로 돈을 벌 수 있습니다.

장점

  • Public Cloud에 있는 SW를 웹 브라우저로 불러와 언제 어디서나 사용할 수 있습니다.
  • 사용자는 웹만 접속하면 되기 때문에 사용하기 매우 쉽고, 최신 SW 업데이트를 빠르게 제공받을 수 있습니다. 사실상 기업 입장에서도 클라우드에 SW가 있기 때문에 따로 업데이트를 하지 않아도 접속한 사용자는 최신 SW를 사용하게 될 수 있습니다.

단점

  • 단점으로는 SaaS의 특성상 반드시 인터넷에 접속할 수 있어야만 사용할 수 있고, 외부의 데이터 노출에 대한 위험이 있습니다.

예시

  • 예로는 웹 메일, 구글 클라우드, 네이버 클라우드, MS오피스365, 드롭박스 등이 있습니다.

 

결과

  • 정리하자면 위의 그림과 같이 한 단어로 host, build, consume으로 표현이 가능합니다.
반응형
반응형

사춘기 시절에... 내 안에 북받쳐 오르는 감정과 생각들이 더이상 내 안에 담아둘 수 없어서... 그대로 있으면 터질거 같은 심정에...

펜을 들고 글을 썼었다.

그냥 끄적끄적... 나만의 이야기를  썻었다.

 

이런 마음상태는 10년정도를 주기로... 찾아오는 것 같다.

학창시절엔 고민때문에 

군대를 다녀온 후엔 학창시절 이루지 못했던 나 자신의 저평가를 이겨내고 나를 상승시키고자...

이젠 나 자신이 정말 좋아하는것을 찾아가며....

똑같이 찾아온 마음의 병을 마주하고 있다.

 

난 내가 정말 좋아하는게 뭔지 몰라 매일매일을 아무도 모르는 마음의 병과 싸우고 있다.

시기별로 다른 주제로 찾아오는 병...

이젠 '내가 좋아하는 것'이란 주제로 찾아왔다. 

이런 여정은 항상 언제끝날지 알수 없었다. 기본이 7년 정도.... 그 이상이었으니....

또다시 난 그 여정을 시작하고 있다.

 

하지만.... 반드시 난.... 알아낼 것이다. 내가 좋아하는 게 뭔지.... 

답답하지만 약간은 웃을 수 있다. 결국은 알게 될 것이란걸 알기에... 결국 어떤 깨달음과 함께 마무리 될것을 알기에...

 

반응형

'하고싶은말' 카테고리의 다른 글

MZX  (1) 2022.05.12

+ Recent posts