레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시
레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시

NVIDIA-GPU Docker 설치 RTX 3080, Ubuntu 20.04 환경

Docker를 활용 한다는 것은 시스템 세팅에 있어서, 어느 누군가가 만들어 놓은 것을 잘 가져가 쓰는 것과 같습니다. 지금까지는 직접 서버에 세팅 해서 직접 하였지만, 지금은 Docker 환경에서 이를 수행 하려고 합니다. 지금 시스템 사양은 아래와 같습니다.

  1. 시스템 사양


시스템 사양은 아래와 같습니다.
  • CPU : I7-8700
  • MEMORY : SAMSUNG 64GB
  • SSD: 1TB
  • GPU : NVIDIA RTX3080


  •   2. NVIDA CUDA GPU 설치


    Ubuntu 20.04 에서는 Nvidia CUDA 드라이버가 설치 되어 있습니다. 하지만 CUDA 버전을 설치 하는 것이 결정되어 있지 않습니다. 그래서 아래와 같이 미리 GPU를 삭제 하여야 합니다.

  • 기존에 설치된 nvidia 와 cuda 제거
  •   $ sudo apt-get remove --purge '^nvidia-.*'
      $ sudo apt-get autoremove --purge 'cuda*'

  • CUDA TOOLKit Install
  •   $sudo apt install nvidia-cuda-toolkit

  • 쿠다 버전 확인
  •   $ nvcc -V

  • 설치 가능한 버전 체크
  •   $ ubuntu-drivers devices




  • CUDA 버전 설치
  •   $ sudo apt install nvidia-driver-510


    그리고  재시작 합니다.

     

     3. NVIDIA DOCKER 이미지 설치


     향후 특정 사용자가  Docker 를 사용하게 하려면,   사용자를 추가 하여야 합니다. 
      $sudo usermod -aG docker $USER 

    그리고 재시작 해야 합니다.   

     Nvidia-docker 설치는 아래 홈페이지에 직접 접속 하셔서 설치 하셔야, 놓치지 않고 정확하게 설치 할 수 있습니다.
                                        NVIDA Docker 설치 사이트
    위의 링크와같이 설치 하였다면, Docker 까지 같이 설치 되었을 것입니다.
     

     4. Nvidia 이미지내 명령 실행


      아래와 같이 명령어를 차례대로 수행 하시면, Docker 실행 되는 여부와 CUDA를 실행 하기 위한 Path도 지정 됩니다.
      $ sudo nvidia-docker run --rm hello-world
      $ apt-cache madison nvidia-docker2 nvidia-container-runtime
      $ sudo docker run -it nvidia/cuda:11.0-base


     5. Nvidia Docer image 실행


      $ sudo docker run -it --rm --runtime=nvidia -v $(realpath ~/Dropbox):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:2.4.3-gpu-jupyter


    위와 같이 명령어를 실행 하였을때,  Docker에서는 이미지 다운(pull) 하게 되면서,  설치 후 시동이 됩니다.    여기에서  URL 상에 토큰 Key 가 들어 있으니 참고 하면 됩니다. 


     도커명령어 중에서 가장 중요한 것은 포트 입니다.  포트를 지정 하지 않으면,  바깥에서 사용할 수 없습니다. 


    만약에 윈도우즈 Docker에서  CPU 전용으로 실행 시키려면 아래와 같이 하여야 합니다.  
    > docker run -it --rm  -v "E:\Dropbox:/tf/notebooks" -p 8888:8888 tensorflow/tensorflow:2.4.3-jupyter


    신경망을 위한 데이터 표현의 기하학적 해석

          딥러닝을 맨 처음 시작 할때,  배우는 것이 이것이 아닐까?   선행대수학의 기초가 되는 것이지만,  케라스 창시자에게 배우는 딥러닝에서는 수학공식을 기록하지 않고, 데이터만 표현 하였다.    여기에서는 수학적인 해석까지 덧붙여 표현 할 것이다. 


      여기에서 핵심 키워드를 이야기 하면 아래와 같다.


    텐서는 임의의 차원 개수를 가지는 행렬의 일반화된 모습이다. (텐서에는 차원(dimension)을 종종 축(axis)이라고 부른다.


    ubunt GPU 설정 후 Keras 버전 테스트 MNIST

       ubunt GPU RTX3080 설정 후  Keras가 실행 되는지 확인 해봐야 한다.   RTX3080을  설치가 다 끝났는데,  케라스가 설치되어 있지 않아,  계속 재 설치 하였기 때문이다.  

    그렇다고 무언가 대단한 것을 테스트 할 필요는 없다.   되는지 만 확인 해야 하기 때문이다.  

    아래의 소스코드는 "케라스 창시자에게 배우는 딥러닝" 책에서 인용한 것이다. 

    matplotlib 그래프 그리기 DNN 딥러닝 Line chart

     딥러닝을 맨 처음 테스트로 배우는  쉬운 예제로 mnist 데이터셋을 사용한다.

    사람이 우편번호를 적은 숫자를 컴퓨터가 얼마나 잘 인식 하는지에 대한 문제이다. 복잡한 그림의 문제는 CNN의 Convolution filter를 이용해서 Network를 돌리지만, 이건은 이미 전처리가 다 된 데이터 셋이고, 데이터 건수도 많아서 CNN까지 안 돌리고, 그냥 Deep Learing Network를 돌렸다.

    아래는 tensorflow를 import한 다음에 내장 데이터셋 mnlist를 train과 test set으로 나눈것이다.


    import tensorflow as tf

    mnist = tf.keras.datasets.mnist

    (x_train, y_train), (x_test, y_test) = mnist.load_data()

    x_train, x_test = x_train / 255.0, x_test / 255.0

    Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz

    11493376/11490434 [==============================] - 0s 0us/step

    신경망 알고리즘을 벡터화 한번에 전체 샘플 업데이트 야나두 딥러닝

    확률적 경사하강법은 가중치 1번 업데이트 할때 1개의 샘플을 사용하므로, 손실 함수의 전역 최소값을 불안 정하게 찾았다.   

    하지만,  배치 하강법은 가중치를 1번 업데이트 할때  전체 샘플을 사용하므로, 손실 함수의 전역 최소값을 안정적으로 찾는다.   

    여기에서 가장 핵심적으로 이야기 할 수 있는 그림은 아래와 같다. 

    점곱과 행렬곱의 차이



    로지스틱 손실함수 L과 a미분하기 야나두 딥러닝 강의 후기

       야나두 딥러닝 강의 할때  순간 당황해서 실수한 것이다.  로지스틱 손실 함수 L과 a 미분하기 공식은 수학 적으로는 꽤 복잡해 보인다.   한번 당황하다 보니,  계속 당황 해서 점심시간 까지 당항 스러움이 있었다.  지금은 어느 정도 정리되었다.  


    그럼  당황했던 내용으로 들어가 보자.

     

    로지스틱 손실 함수 미분하기

    CNN 이미지 데이터 전처리 및 변환 기초 지식 [메모리와 하드 용량이 큰 경우 빠른 연산], Cat and dog dataset

        CNN 하면서 이미지 데이터 전처리는 아주 중요한 것이다.  본인이 수집하거나 관찰 한 사진이 많고,  데이터  라벨 작업을 하였다면,  아래와 같은  딥러닝 할 수 있는 데이터 셋을 만들어야 한다. 

    즉 feature (image) 값과  label값(cat & dog)을   numpy array값을 변환 하여야 한다.  데이터 전처리 하는데,  아래의 2가지 방법이 있다.  이번 설명은 첫번째 설명 방법이다.   이런 방법으로 하려면,  RAM 메모리와 HDD 용량이 커야 한다.   

    • 이미지 데이터 원본 그대로 학습
    • Data generator 로 학습
      즉,  개별 설비를 AI로  자동 제어 하고자 하는 시스템을 구현하는 경우 첫번째 방법으로 한다. 

    Image processing

    참고로 훈련할 파일은 아래에 있다. 

    야나두 딥러닝 교육 후기 정리

       사내 자율 교육에서 야나두 딥러닝을 진행 하였다.   중공업 계열인 우리 회사 특성 상 남자들만 있었고,   코로나 바이러스의 영향으로 방역 수칙을 준수 하면서 강의를 해야 했기 때문에,  아주 큰 강의장에  작은 인원을 두고 강의 하였다.  




      즉 사회적 거리두기를 하고 하였다.   역시 딥러닝 강의인 만큼  목차는 아래와 같았다. 

    회귀 분석 최소제곱법 (선형 VS 경사하강법) 야나두 딥러닝

      야나두 딥러닝  강의를 하는 데,  질문이 나왔다.   linear regression(회귀 분석)을 할 때, 경사 하강 법에 의해 계산 된 것이 좋은지 ,  아니면, 통계학은 계산 된 최소 제곱법을 간단 하게 정리 하여 계산 한것이 좋은지 확인 해 보라는 것이였다.    


    선형 VS  경사하강

      그런데,  야나두 딥러닝에서 경사 하강법을 가지고 회귀 분석하는 것은  교육용으로 쓰이는 것이다.   실무 용으로 쓰이는 것이 아니다.   

    Linear algebra 선형대수 야나두 딥러닝

    어느 딥러닝 책에서 이런 카피가 나왔다. 
     딥러닝과 수학엔 어떤관계가 있을까? 

     딥러닝은 미분적분학, 선형대수학, 통계학과 관련 있고 이중에서 선형대수학이 단연 으뜸이라 한다. 그런데 도대체 어떤 관계가 있다는 걸까?

      선형대수는 관련 성이 아주 깊다.  딥러닝 모델을 만들때, Single Layer를 만들어서 하는 경우는 거의 없기 때문이다.   Single Layer는  만드는 경우는  교육 받을 때 이외에는 거의 쓰지 않는다.   실제로 모델을 만들때는 Multi Layer를 사용한다.   Multi Layer의 기본적인 공식이 행렬로 이루어 졌으니,  반드시 알고 넘어가야 한다. 


      
    선형대수  Linear algebra




    numpy 기초 브로드캐스팅, array, arange, indexing, slicing 야나두 딥러닝

      딥러닝 초반에 공부 할 때,  사람들이 굉장히 많이 헤깔려 하는 분야가 있다.  바로 numpy이다.  기본적으로 Python을 할때,  리스트 및 배열을 표현한다.  numpy.에서   주로 하는 것은 배열을 차원으로 표현하는 것이다.   Image연산은 3차원 배열이 되고,   일반적인 머신러닝은 2차원 배열로 한다.  주로 사용하는 명령어는  array, arange, 이다.  

    기본적으로 알고리즘을 표현 하려면, 일반적인 Python 과  numpy로 표현 해야 하는데,  이것을 모르는 상태에서  그냥 데이터 셋만 불러와서 모델을 돌리는 것은 의미가 없다.     딥러닝의 CNN의 모델이 있다고 가정 하면,   그 모델에 대하여,  파라메터 튜닝에 의해 모델의 성능이 달라지는데,   파라메터 튜닝을 알려면 기본적인 알고리즘은 이다.  
     




    numpy의 국내 서적이 거의 없다. 있긴 한데,  굉장히 헤깔리게 많이 늘려 놓았다.  차라리 아래의 사이트에서 참조해서 코드를 익히는 것이 좋아서 아래의 사이트를 참고 하였다. 

    넘파이 기초



    교차 검증 (cross validation) 야나두 딥러닝

       교차 검증(cross validation)은  샘플의 갯수가 적을 때, 하는 알고리즘이다.  샘플이 많은 경우 굳이 교차 검증을 수행할 필요가 없다.  보수적으로 보았을때,  약 2,000개의 샘플 데이터가 있으면, 교차 검증을 할 이유가 없다.

       머신러닝에서 매우 많이 사용하는 것임,  이미지 계열의 딥러닝을 갔었을때,  너무나 많은 데이터가 있어,  굳이 할 필요가 없다.  그리고 소량의 이미지를 연산 하였을때,  전이학습을 통해서 학습을 하니,  교차 검증이 필요 없다.   


    교차 검증(cross validation)

     

    R에서 Tensorflow GPU 실행 하기 우분투 18.04

        R에서도 Tensorflow를  GPU로  돌릴 수 있다.   다만 아래의 절차를 따를 경우에만 가능하다. 

    R Tensorflow 세팅 순서


    우분투에서 성공을 했었는데,  Windows에서도 성공할 수 있을 것 같다. 

       

    가중치 규제 (regularization) L1, L2 란 야나두 딥러닝

          과대적합을 해결 하는 대표적인 방법 중 하나인 가중치 규제(regularization) 이다.  가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한 하는 기법이다.  가중치를 규제하면 모델의 일반화 성능이 올라간다. 


    아래 경사가 급한 것과 낮은 그래프 특정 샘플에만 적용 하는 사례를 보여 준다.   즉 가중치를 제한 하면,  모델 몇 개의 데이터에 집착하지 않는다. 

    노름(norm) 의 이란 야나두 딥러닝

     Norm, 노름 

    과대적합(overfitting), 과소적합(underfitting) 야나두 딥러닝

      모델 돌린 이후에 분석하는 overfitting, underfitting

    검증세트 분할, 데이터 스케일 과적합 및 모델 튜닝

    과적합 및 모델 튜닝에 대하여..



        요새 Tensorflow나 Keras에 들어가면,  우리가 필요한 소스코드가 API 형태로 되어 있다.  따라서 데이터 전처리가  수행 되고 나면,    CNN인 경우  필터의 크기  및   dens의 크기 epochs 배치 사이즈, 데이터 분할 등  같은 파라메터 만 조정 하게 된다.    사실상 프로젝트에 들어가면,  모델 돌리는 것 보다  더욱 중요 한 것이,  데이터 셋 준비하는 것이다.  

    특히 CNN 같은 경우에는 사람 눈으로 식별 할 수 있을 정도로 데이터 셋이 준비가 되어야 하는 것은 필수 적이다. 


    검증 세트 분할 

    로지스틱 회귀 뉴런으로 단일층 신경망

     신경망 이야기 하게 되면,  제프리 힌튼 교수 처음 강의에 뉴런에 대해서 나온다.  한국어로 번역이 가능 한데,   음성을 영어로 인식 한 다음에  번역한 다음에 한국어로 나오게 할 수 있다.  

    즉 사람의 뇌의 구조는 복잡하게 되어 있다는 데  뉴런이 10^10개  100억개가 있다고 한다.  생물학적인 성격의 설명이 있는데,  직접 동영상을 보는 것이 좋을 것 같아서 링크하였다.

        

    1. 일반적인 신경망  

    유방암 데이터 세트 (Wisconsin breast cancer dataset)

         제조업에는   금융하고, 의학 분야와 같이 분류 할 수 있는 데이터들이 많이 있다.  이번에 소개할 데이터 셋은 사이킷런에 있는 위스콘신 유방암 데이터 셋이다.  유방암 데이터 셋은 유방암 세포 특징 10개에 대하여 평균, 표준오차, 최대 이상치가 기록되어 있다. 


    유방암 데이터 세트의 분석 목표는 유방암 데이터 샘플이 악성 종양인기 정상 종양인지 분류하는 문제 이다.  

     1. 유방암 데이터 세트 

    분류 하는 뉴런 part 1

      분류하는 뉴런은  딥러닝에서 가장 많이 사용하는 것이다.   일반 데이터를 분류하고자 할때는 데이터가 없어서, 분류를 하지 못하였다면,  사진이나  글 같은 비정형 데이터는 상당히 많다.  하지만,  그것을 하는데도  사전에 전처리 기술이 필요하지만,  딥러닝은 퍼셉트론을 기반으로 지속적으로 발전 해 온 것도 사실이다.       


    1. Perceptron(퍼셉트론)

    css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

     앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...