[컴] Blogger 에서 MathJax 사용하기

블로그 수식넣기 어떻게 수식 사용/ latex /

Blogger 에서 MathJax 사용하기

blog 에 수학 수식을 적기위해 MathJax 를 사용해 보려한다. blogger 의 경우 <head> 부분에 다음 내용을 넣으면 된다.

version 2 까지는 여러 component 가 하나의 MathJax.js 에 들어있어서, configuration 을 해줘야 했다고 한다. 그런데 이제는 tex-chtml.js 처럼 분리돼 있어서 설정이 줄었다.(참고: Configuring and Loading MathJax — MathJax 3.2 documentation)

다음 설정은 ‘...$ 를 delimiter 로 사용한다고 정하는 것이다. \$와 \$사이에 있는 것을 MathJax가 수식으로 보는 것이다. 그래서 다음 수식은 $...$\(...\) 사이에 있는 것을 MathJax 가 수식으로 인식 하게 하는 것이다.

<script>
MathJax = {
  tex: {
    inlineMath: [['$', '$'], ['\\(', '\\)']]
  }
};
</script>
<script id="MathJax-script" async
  src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js">
</script>

사용

Online LaTeX Equation Editor 에서 수식을 만들고, 이것을 글에 붙여넣으면 된다.
또는 여기 를 이용해서 바로 그려서 얻을 수 있다.

  • \($x_{0}\sim q(x_{0})\) –> ($x_{0}q(x_{0}))
  • $x_{0}\sim q(x_{0})$ –> x0 ∼ q(x0)

pandoc

See Also

  1. Browser · KaTeX : mathjax 보다 렌더링이 더 빠르다고 이야기한다. 하지만 MathJax3 에와의 비교 에서는 MathJax3 가 더 빠른 듯 보인다.
  2. 쿠…sal: [컴][유틸] 수식 그려주는 도구

Reference

  1. Irreducible representation: MathJax in Blogger (II)

[컴][머신러닝] pytorch 로 따라해보는 diffusion model

ai 그림그리기 원리 / 어떻게 그림을 머신러닝으로 그리나 / how to / draw / machine learning / ML / 이미지 생성 모델

정리중…

pytorch 로 따라해보는 diffusion model

ref. 1 의 내용을 정리했다.

잡음제거 확산 확률 모델(Denoising Diffusion Probabilistic Models, DDPMs)은 확산모델(diffusion models), score-based generative models 또는 간단하게 autoencoders 라고 불린다.

이 방법은 2015년 쯤 소개되었지만,

까지 계속 이 방법을 독립적으로 발전시켜왔다.

diffusion model 들에는 여러 관점들이 있다. 여기서는 dicrete-time perspective(이산시간 관점) 를 채용했다. (잠재변수모형, latent variable model) 다른 관점들도 꼭 확인해 봐야 한다.

유명한 예:

package 설치

pytorch 설치가 돼 있어야 한다.

pip install -q -U einops datasets matplotlib tqdm

설명

set-up(설정)은 2가지 프로세스로 이뤄진다.

  1. 우리의 선택에 대한 고정된(즉, 미리정의된) forward diffusion process \(q\) 가 있고, 이것은 pure noise 가 될때가지 점차적으로 Gaussian noise 를 이미지에 더한다.
  2. 학습된 reverse denoising diffusion procee \(p_{\theta}\) 에서는 신경망(neural network) 이 훈련된다. 실제 이미지가 나올때까지, pure noise 에서 시작해서, 점차적으로 이미지의 noise 를 없애는 것을 훈련하게 된다.

t 에 의해 인덱싱된 forward, reverse process 들 모두, 한정된 tiem step 수 T 동안 일어난다.(DDPM 저자들은 T = 1000 을 사용했다.) 당신의 ’data 분포’에서 t=0 을 가지고 시작한다. t=0 는 실제 이미지 x0 를 샘플링하는 시점이다.

forward process 는 각 time step t 에서 Gaussian distribution 의 몇몇 noise 를 샘플링한다. 그리고 그것을 이전 time step 의 image 에 더한다. ‘충분히 큰 T’ 와 ’각 time step 에서 noise 를 더하기 위한 잘 행동된 schedule’이 주어지면,
점차적인 과정을 통해서, t=T 인 시점에 isotropic Gaussian 분포 라 불리는 것을 얻을 것이다.

좀더 수학적인 설명

궁극적으로 다루기 쉬운 손실 함수(loss function)이가 필요하다. 이 loss function 은 우리의 neural network 가 최적화 작업을 하는데 필요 하다.

\(q(x_{0})\) 를 실제 데이터 분포라고 하자. 이 \(q(x_{0})\) 는 ‘실제 이미지’(real image) 이다. 우리는 이 분포에서 샘플을 채취하여 \(x_{0}\sim q(x_{0})\) 라는 이미지를 얻을 수 있다.

우리는 전방 확산 프로세스(forward diffusion process) 를 \(q(x_{t}|x_{t-1})\) 로 정의한다.
이 프로세스는 각 time step t 에서 가우스 노이즈(Gaussian noise)를 추가한다.

알려진 분산 스케줄(variance schedule) ‘\(0 < \beta_{1} < \beta_{1} < ... < \beta_{T} < 1\)’ 에 따라 \(q(x_{t}|x_{t-1})\) 는 다음과 같이 적을 수 있다.

  • \(q(x_{t}|x_{t-1}) = N(x_{t}; \sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}I)\)

가우시안 분포(Gaussian distribution)라고 부르는 정규분포(normal distribution) 는 2개의 parameter 로 정의되어 있다. ‘평균’(\(\mu\))과 ‘분산’(\(\sigma^{2}\)) 이다.

기본적으로, time step t 에서 각각의 새로운(미세하게 노이즈가 더 낀)이미지는

  • 평균값 \(\mu_{t}\)\(\sqrt{1-\beta_{t}}x_{t-1}\) 이고,
  • 분산 \(\sigma_{t}^{2}\)\(\beta_{t}\)

conditional Gaussian distribution (조건부 가우시안 분포)으로부터 그려진다.

이 분포는 우리가 \(\varepsilon \sim N(0, I)\) 에서 sample 을 가져오고, 그리고 나서 \(x_{t}\)\(\sqrt{1-\beta_{t} }x_{t-1} + \sqrt{\beta_{t}}\epsilon\) 로 설정하면 얻을 수 있다.

각 time step \(t\) 에서 \(\beta_{t}\) 는 상수(constant) 가 아니다.

사실, 1 은 소위 이야기하는 variance schedule(분산 스케줄) 을 정의한다. 이 variance schedule은 1차 함수, 2차 함수, 코사인 함수등이 될 수 있다.

\(x_{0}\) 에서 시작하자. 우리는 \(x_{1}, ..., x_{t}, ..., x_{T}\) 로 끝난다. 여기서 \(x_{T}\) 는 순수한 Gaussian noise 이다. (단, 우리가 schedule 을 적절하게 설정했어야 한다.)

이제, 만약 우리가 조건 분포(conditional distribution) “\(p(x_{t-1}|x_{t})\)” 을 안다면, 우리는 역으로 process 를 실행할 수 있다.
random Gaussian noise \(x_{T}\) 샘플을 가져오고, 그리고 나서 점차적으로 그 noise 들을 제거(denoise)하여 우리는 실제 분포 \(x_{0}\) 의 샘플을 얻게 된다.

그러나, 우리는 \(p(x_{t-1}|x_{t})\) 를 모른다. 이것은 다루기 힘들다. 왜냐하면 이 조건부 확률(conditional probability) 를 계산하기 위해 모든 가능한 이미지들의 분포를 알아야 하기 때문이다. 그렇기 때문에, 우리는 이 조건부 확률 분포(conditional probability distribution) 의 근사치를 계산하기 위해 신경망(neural network) 을 지렛대로 이용할 것이다.

이것을 \(p_{\theta}(x_{t-1}|x_{t})\) 라고 부르자. 이것은 신경망의 parameter 인 \(\theta\) 를 가지고 있고, gradient descent 에 의해 update 된다.

뒷방향으로의 process (backward process)의 조건부확률 분포(conditional probability distribution) 을 표현하기 위해서 우리는 신경망이 필요하다. 이 reverse process 또한 Gaussian (정규분포)이라고 가정하자.
모든 Gaussian 분포는 2개의 parameter 들로 정의된다는 것을 떠올리자.

  • 평균 : \(\mu_{\theta}\)
  • 분산 : \(\sigma_{\theta}\)

그래서 우리는 다음과 같이 이 process 를 매개변수로 표현할 수 있다.

  • \(p_{\theta}(x_{t-1}|x_{t}) = N(x_{t-1};\mu_{\theta}(x_{t}, t), \sum\nolimits_\theta (x_{t}, t))\)

평균, 분산 값은 또한 noise level \(t\)에 따라 달라진다.

그런이유로, 우리의 신경망은 ’평균’과 ’분산’을 학습(표현)하는 것이 필요하다.

그러나, DDPM 저자들은 ’분산’을 고정하기로 정했다. 그리고 신경망이 이 조건부확률 분포(conditional probability distribution)의 평균값 \(\mu_{\theta}\) 만을 학습하게 했다.

논문에서:

First, we set \(\sum\nolimits_\theta (x_{t}, t) = \sigma_{t}^{2}I\) to untrained time dependent constants. Experimentally, both \(\sigma_{t}^{2} = \beta_{t}\) and \(\sigma_{t}^{2} = \widetilde{\beta_{t}}\) (see paper) had similar results.

먼저, 우리는 \(\sum\nolimits_\theta (x_{t}, t) = \sigma_{t}^{2}I\) 를 설정했다. 훈련되지 않은, 시간에 종속적인 상수로 set했다. 실험에선, \(\sigma_{t}^{2} = \beta_{t}\)\(\sigma_{t}^{2} = \widetilde{\beta_{t}}\), 둘다 비슷한 결과를 얻었다.

이것은 그리고 나서 나중에 Improved diffusion models paper 에서 향상됐다. 이곳에서 신경망은 또한 이 backward process 의 분산, 평균을 배운다.

그래서 우리는 신경망이 단순히 이 조건부 확률 분포(conditional probability distribution)의 ’평균’만을 배우면 된다고 가정할 것이다.

간단정리:

backward process 에 대한 식(model)을 구하려면, 모든 가능한 이미지들의 분포를 알아야 하는데, 이것은 어렵다. 그래서 근사치에 대한 model을 구하려한다. 그것을 위해 neural network 를 사용했다.

objective function 정의하기

backward process 의 평균을 학습하기위한 objective function(목적함수)를 유도하기 위해 저자들은 \(q\)\(p_{\theta}\) 의 조합은 variational auto-encoder(VAE, 가변자동인코더) 처럼 보여질 수 있다.고 본다.(Kingma et al., 2013) 그런 이유로, variational lower bound(ELBO, 변동하한) 는 기초적인 실제 데이터 샘플 \(x_{0}\) 에 대한 음의 log 확률(negative log-likelihood)을 최소화하는데 사용되어질 수 있다.(ELBO 에 대한 자세한 사항에 대해서는 VAE 논문을 참조한다.)

이 process를 위한 ELBO 는 각 time step \(t\) 에서의 loss들의 합이다. 즉, \(L=L_{0} + L_{1} + ... + L_{T}\).

forward \(q\) process 와 backward process 의 구조에 의해 loss의 각 항(\(L_{0}\)는 제외) 은 실제적으로 2개의 정규분포 사이의 KL divergence 이다. 이 KL divergence는 평균에 대한 L2-loss로 명시적으로 기록된다.

구성된 forward procee \(q\)의 직접적인 결과는, Sohl-Dickstein et al.에 의해 보여진것처럼, 우리는 \(x_{0}\) 가 어떤 임의의 noise level 조건에 있더라도 \(x_{t}\) 를 샘플링할 수 있다. (왜냐하면, 가우시안(Gaussian)들의 합은 또한 가우시안이니까.) 이것은 매우 편리하다. 왜냐하면 \(x_{t}\)을 샘플링 하기 위해서 \(q\) 를 반복적으로 적용할 필요가 없기 때문이다.

  • \(q(x_{t}|x_{0}) = N(x_{t};\sqrt{\overline{\alpha}_{t}}x_{0},(1 - \overline{\alpha}_{t})I)\)
  • \(\alpha_{t} := 1 - \beta_{t}\)\(\overline{\alpha}_{t} := \prod\nolimits_{s=1}^{t}\alpha_{s}\)

이 방정식을 ‘nice property’ 라고 부르자. 이 뜻은 가우시안 noise 를 샘플로 취할 수 있고, 적절하게 확장(scale)할 수 있다. 그리고 \(x_{0}\)에 더해서 \(x_{T}\)를 직접얻을 수 있다.

\(\overline{\alpha}_{t}\) 는 알려진 \(\beta_{t}\) variance schedule 에 대한 함수들이다. 알려졌기에, 미리 계산가능하다.
그래서 이것들은 훈련중에, loss function \(L\) 의 random 항목들을 최적화할 수 있게 해준다.
(다른말로 하면, 훈련중에 랜덤하게 \(t\)를 샘플링하고, \(L_{t}\)를 최적화 해준다.)

Ho et al. 등에서 보여진바와 같이, 이 property 의 또 다른 장점은 신경망이 ‘loss들을 구성하는 KL 항목들’ 내의 noise level \(t\) 에서 ‘네트워크 \(\varepsilon_{\theta}(x_{t}, t)\) 를 통해서 추가된 noise’ 를 학습하도록 하기위해 평균을 다시 매개변수화 한다.(reparametrize) (이 훌륭한 블로그 게시물을 참조하자.)

이 말은 우리의 신경망이 평균 예측기(mean predictor) 보다는 “noise predictor”(노이즈 예측기)가 된다는 뜻이다.

개인적인 해석

부인(Disclaimer): 이 해석은 틀릴 수 있다.

이것을 대략적으로 이해한 바를 적으면, DDPM 은 이미지를 추상화시키고(noise 라고 보면 될듯), 이 추상화된 이미지에서 부터 다시 구체적인 이미지를 뽑아내는 것인 듯 하다.

즉, 특정이미지의 변형을 뽑아내는 방법인 듯 하다. 그래서 아예 새로운 그림을 그리는 것이 아닌, 있는 그림의 변형을 만들어내는 방법인듯 보인다.

entropy

  1. 초보를 위한 정보이론 안내서 - Entropy란 무엇일까
  2. What’s an intuitive way to think of cross entropy? - Quora
  3. Information entropy (video) | Khan Academy
  4. Kullback-Leibler Divergence Explained — Count Bayesie

See Also

  1. [논문 리뷰] Denoising Diffusion Probabilistic Model(2020)
  2. Diffusion model 설명 (Diffusion model이란? Diffusion model 증명) - 유니의 공부
  3. Generating images with DDPMs: A PyTorch Implementation | by Brian Pulfer | MLearning.ai | Medium
  4. machine learning - Objective function, cost function, loss function: are they the same thing? - Cross Validated
  5. What are Diffusion Models? | Lil’Log
  6. Introduction to Diffusion Models for Machine Learning

Reference

  1. The Annotated Diffusion Model

[컴][머신러닝] PyTorch 설치

파이토치 / 텐서플로우 / tensor / flow / 설치 방법

PyTorch 설치

CUDA 설치

CUDA 설치 를 참고하자

version 확인:

D:\>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

PyTorch 설치

여기선 virtualenv 를 만들어서 설치했다.

D:\diffusion>virtualenv env

주의할 점은 자신의 cuda version 이 11.8 이라해도, pytorch 의 cuda 버전은 11.6을 택해야 한다. 11.8에 대한 경로가 없어서, cuda 가 없는 경우에 대한 pytorch 를 설치하게 된다.

설치

D:\diffusion>.\env\Scripts\activate.bat
(env) D:\diffusion>pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu116
Collecting torch
  Downloading https://download.pytorch.org/whl/cu116/torch-1.12.1%2Bcu116-cp39-cp39-win_amd64.whl (2388.0 MB)
     ---------------------------------------- 2.4/2.4 GB 877.5 kB/s eta 0:00:00
Collecting torchvision
  Downloading https://download.pytorch.org/whl/cu116/torchvision-0.13.1%2Bcu116-cp39-cp39-win_amd64.whl (2.6 MB)
     ---------------------------------------- 2.6/2.6 MB 9.6 MB/s eta 0:00:00
Collecting torchaudio
  Downloading https://download.pytorch.org/whl/cu116/torchaudio-0.12.1%2Bcu116-cp39-cp39-win_amd64.whl (1.2 MB)
     ---------------------------------------- 1.2/1.2 MB 10.9 MB/s eta 0:00:00
Collecting typing-extensions
  Using cached typing_extensions-4.4.0-py3-none-any.whl (26 kB)
Collecting requests
  Using cached requests-2.28.1-py3-none-any.whl (62 kB)
Collecting pillow!=8.3.*,>=5.3.0
  Using cached Pillow-9.2.0-cp39-cp39-win_amd64.whl (3.3 MB)
Collecting numpy
  Using cached numpy-1.23.3-cp39-cp39-win_amd64.whl (14.7 MB)
Collecting charset-normalizer<3,>=2
  Using cached charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2022.9.24-py3-none-any.whl (161 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.12-py2.py3-none-any.whl (140 kB)
Installing collected packages: urllib3, typing-extensions, pillow, numpy, idna, charset-normalizer, certifi, torch, requests, torchvision, torchaudio
Successfully installed certifi-2022.9.24 charset-normalizer-2.1.1 idna-3.4 numpy-1.23.3 pillow-9.2.0 requests-2.28.1 torch-1.12.1+cu116 torchaudio-0.12.1+cu116 torchvision-0.13.1+cu116 typing-extensions-4.4.0 urllib3-1.26.12

CUDA 를 사용안하는 PyTorch 가 설치된 경우

D:\diffusion>.\env\Scripts\activate.bat
(env) D:\diffusion>pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu118
Collecting torch
  Downloading torch-1.12.1-cp39-cp39-win_amd64.whl (161.8 MB)
     ---------------------------------------- 161.8/161.8 MB 2.7 MB/s eta 0:00:00
Collecting torchvision
  Downloading torchvision-0.13.1-cp39-cp39-win_amd64.whl (1.1 MB)
     ---------------------------------------- 1.1/1.1 MB 13.5 MB/s eta 0:00:00
Collecting torchaudio
  Downloading torchaudio-0.12.1-cp39-cp39-win_amd64.whl (969 kB)
     ---------------------------------------- 969.6/969.6 kB 10.2 MB/s eta 0:00:00
Collecting typing-extensions
  Downloading typing_extensions-4.4.0-py3-none-any.whl (26 kB)
Collecting numpy
  Downloading numpy-1.23.3-cp39-cp39-win_amd64.whl (14.7 MB)
     ---------------------------------------- 14.7/14.7 MB 6.5 MB/s eta 0:00:00
Collecting pillow!=8.3.*,>=5.3.0
  Downloading Pillow-9.2.0-cp39-cp39-win_amd64.whl (3.3 MB)
     ---------------------------------------- 3.3/3.3 MB 11.6 MB/s eta 0:00:00
Collecting requests
  Downloading requests-2.28.1-py3-none-any.whl (62 kB)
     ---------------------------------------- 62.8/62.8 kB ? eta 0:00:00
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.12-py2.py3-none-any.whl (140 kB)
     ---------------------------------------- 140.4/140.4 kB 8.1 MB/s eta 0:00:00
Collecting idna<4,>=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ---------------------------------------- 61.5/61.5 kB ? eta 0:00:00
Collecting certifi>=2017.4.17
  Downloading certifi-2022.9.24-py3-none-any.whl (161 kB)
     ---------------------------------------- 161.1/161.1 kB 9.4 MB/s eta 0:00:00
Collecting charset-normalizer<3,>=2
  Downloading charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Installing collected packages: urllib3, typing-extensions, pillow, numpy, idna, charset-normalizer, certifi, torch, requests, torchvision, torchaudio
Successfully installed certifi-2022.9.24 charset-normalizer-2.1.1 idna-3.4 numpy-1.23.3 pillow-9.2.0 requests-2.28.1 torch-1.12.1 torchaudio-0.12.1 torchvision-0.13.1 typing-extensions-4.4.0 urllib3-1.26.12

설치 확인

(env) D:\diffusion>python
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> x = torch.rand(5,3)
>>> print(x)
tensor([[0.7964, 0.4330, 0.9297],
        [0.1587, 0.6058, 0.9949],
        [0.9037, 0.8595, 0.1423],
        [0.1058, 0.2947, 0.9277],
        [0.1316, 0.2070, 0.1998]])
>>> torch.cuda.is_available()
False
>>>

[컴] CUDA 설치

쿠다 설치 / nvidia / cuda how to install /

CUDA 설치

windows 에서 CUDA 를 사용하기 위해 필요한 요소:

  1. CUDA 사용가능한 GPU
  2. 지원하는 MS Windows(Windows 10, 11, Windows Server 2016, 2019, 2022)
  3. Visual Studio : Visual Studio 를 먼저 설치하고 CUDA 를 설치하자. CUDA 설치시점에 해당 Visual Studio 버전에 대한 Nsight 를 설치하게 된다. Nsight 는 CUDA 의 debugging tool 이다.
  4. NVIDIA CUDA Toolkit

Visual Studio 설치

설치 가이드(Installation Guide Windows)에 보면, Visual Studio 2017 15.x 이상(Compiler MSVC Version 191x 이상)은 설치해야 한다.

여기서는 ‘Visual Studio Community 2022’ 를 설치했다.

위 글(Visual Studio 2019: Minimal components needed for CUDA 10 installation) 을 참고하면 cuda 를 위해서는 “Desktop Development with C++”를 선택하면 된다. 개인적으로 ’다운로드후 설치’가 빠른듯 하여 그쪽을 택했다. 용량은 대략 2.17GB 가 필요하다.

CUDA Toolkit 설치

CUDA Toolkit 경로는 다음 page 에서 확인할 수 있다.

설치된 구성요소:

구성요소 버전
NPP Development 11.8
Visual Profiler 11.8
NVJPEG Development 11.8
CUDA COOL 11.8
Disassembler 11.8
CUDA Profiler Tools 11.8
Occupancy Calculator 11.8
CUFFT Development 11.8
Demo Suite 11.8
NVJPEG Runtime 11.8
CUDA Profiler API 11.8
nvcc 11.8
NVIDIA GeForce Experience 3.26.0.115
Visual Studio Integration 11.8
cuxxfilt 11.8
nvprune 11.8
NVML Development 11.8
Nsight Systems 11.8
Nsight Compute 11.8
NVTX Development 11.8
MEMCHECK 11.8
CUSPARSE Runtime 11.8
USBC Driver 1.50.831.832
CUBLAS Runtime 11.8
Nsight NVTX 11.8
CUDA Documentation 11.8
Compute Sanitizer 11.8
CUDART Runtime 11.8
CURAND Development 11.81
NPP Runtime 11.8
CUPTI 11.8
Nsight Visual Studio Edition 11.8
CUSOLVER Development 11.8
PhysX 시스템 소프트웨어 9.21.0713
그래픽 드라이버 522.06
CUFFT Runtime 11.8
HD 오디오 드라이버 1.3.39.16
NVRTC Development 11.8
cuobjdump 11.8
CURAND Runtime 11.8
CUSOLVER Runtime 11.8
CUSPARSE Development 11.8
NVRTC Runtime 11.8
CUBLAS Development 11.8

CUDA Deep Neural Network (cuDNN) ?

deep neural networks 의 primitives 에 대한 GPU 가속 라이브러리이다. cuDNN 은 고도로 조정된(highly tuned) 표준루틴에 대한 구현들을 제공한다. 예를 들면, forward 와 backward convolution, pooling, normalization, activation layer 들

[컴][swe] github issue 를 vscode 에서 notebook 을 이용해서 하기

 

github issue notebooks 사용 / 여러 github issue 를 한번에 보려면 / vscode 에서 이슈관린 / pm project manager / managing / 프로젝트 매니징

github issue 를 vscode 에서 notebook 을 이용해서 하기

vscode 의 extension 중에 ‘GitHub Issue Notebooks’ 가 있다. vscode 에 이 extension 을 깔아보자.

  1. https://vscode.dev/ 로 가자.
  2. extension tab 으로 가서 ‘Github Issue Notebooks’ 를 설치하자.
  3. Menu File –> New File… –> Github Issue Notebook 선택
  4. cell 에 원하는 type 의 query 를 넣는다.

쓸만한 query

아래 링크에서 좀 더 자세한 query 를 날리는 법을 배울 수 있다.

repo:microsoft/vscode is:open

Github 의 repository 에 ipynb file을 upload 하면 rendered view 를 보여준다.

.ipynb 파일을 업로드하면, 그것을 rendering 후 보여준다. 물론 원한다면 raw 도 볼 수 있다.

.ipynb 파일을 공유할 때 의미가 있을 듯 하다.

See Also

  1. Welcome To Colaboratory - Colaboratory : 구글 login 이 필요하다. ref. 2 를 보면, CoLab 은 구글에서 제공하는 무료로 쓸 수 있는 Jupyter notebook server 로 보면 될 듯 싶다. 근데 code 실행시에 GPU 를 사용할 수 있는 듯 하다. 아마 ML 용인듯 싶다.이 CoLab 은 만들어진 notebook 을 google drive 에 저장한다고 한다.

  2. Using Jupyter Notebooks on GitHub: Answers to Most Common Questions - ReviewNB Blog : ReviewNB에 대한 이야기. Github 를 Jupyter Notebook file 에 대한 version control system 으로 사용할 때, 문제점은 diff 를 보면, json 파일 그 자체에 대한 diff 만 제공한다. notebook 의 rendered 된 view 가 아니라. 그래서 diff 를 봐도 차이를 알기 어렵다. 그래서 rendered 된 view 에 대한 diff 를 제공해주는 tool 이 ReviewNB 이다. nbviewer 라는 것도 있다.

Reference

  1. Sample
  2. GitHub - WiktorJ/google-colab-tutorial: Basic tutorial on how to conveniently use Google Colab with Google Drive and Github

[컴] Jupyter notebooks 사용해 보기

쥬피터 노트북 / ipython notebook / interactive / manual

Jupyter notebooks 사용해보기

notebook 은 간단하게 설명한다면, 함수를 사용할 수 있는 페이지를 만들어서 사용하는 것이라 보면 될 듯 하다. 엑셀 같은 느낌으로 바라보면 좋을 듯 하다. 엑셀은 ’셀’안에서 함수를 쓰기도 하고, 직접 값을 입력하기도 하기에, notebook 과 비슷하다.

IPython 이라는 것이 있는데, REPL 과 비슷한데 좀 더 좋은 python 같은 느낌이다. 이 녀석에 대한 web based interface 를 처음 만든것이 IPython notebook 이라 한다. 이것이 2011년 도입됐다. 그리고 2014년 IPython 의 spin-off project 로 Jupyter 가 시작됐다. [ref. 1]

다음 사이트에서 Jupyter 를 미리 체험해 볼 수 있다.

  • Project Jupyter | Try Jupyter : 기본 사용법은 ‘더블클릭’ 과 ‘ctrl+enter’라고 보면 될 듯 하다. cell 을 ’더블클릭’ 하면 edit 모드가 되고, ‘ctrl+enter’ 를 하면 실행된다.

1. Jupyter package 설치 및 jupyter notebook server 실행

절차

python 이 설치되어 있다는 가정으로 이야기 한다.

  1. virtualenv env
  2. <proj>\env\Scripts\activate.bat
  3. pip install jupyter
  4. <proj>/env/Scripts/jupyter.exe notebook

상세 내용

패키지 설치:

(env) c:\> pip install jupyter

<proj>/env/Scripts/jupyter.exe 가 만들어지는데, 이것을 이용해서 notebook 을 실행하자.

서버 실행:

(env) c:\> jupyter notebook

jupyter notebook 를 실행하면 서버가 하나 뜬다. 그러면서 자동으로 웹브라우저를 연다.

이 서버는 local에서만 접근이 가능하다. 설정을 바꾸면 외부에서도 접근이 가능하도록 변경이 가능하다.

참고: jupyter notebook --help 를 실행하면 도움말을 볼 수 있다.

2. Jupyter notebook 사용

  1. 웹브라우저에서 localhost:8888/tree#notebooks 를 연다
  2. Notebook 을 하나 만든다. 그러면 현재 directory 에 Untitle.ipynb 가 만들어진다. 제목을 바꾸면, file 명도 함께 바뀐다.
  3. code 를 넣고 싶으면, Code 를 선택하고, Markdown을 넣고 싶으면 Markdown을 선택후 사용하면 된다.
  4. 하나의 cell 를 완성하고는 ctrl+enter 를 치면, 실행이 된다. 참고로 Notebook 에서 cell 은 3가지 type 이 있다. Code, Markdown, Raw

Reference

  1. Working with Jupyter Notebooks in Visual Studio Code
  2. Jupyter Notebook 사용법(주피터 노트북 설치 및 사용법)
  3. Jupyter Tutorial

[컴] html 문서를 pdf 로 만들때

html 을 웹브라우저로 / pdf 로 만들기 / 어느 브라우저가 잘 만드는가

html 문서를 pdf 로 만들때 유용한 웹브라우저

3개의 web browser 를 가지고 테스트를 해봤다. 인쇄하기(print) 를 누르고, “Microsoft Print to PDF” 와 “PDF로 저장” 을 사용해서 만들었다.

  • Edge: 106.0.1370.34 (공식 빌드) (64비트)
  • Chrome : 105.0.5195.127(공식 빌드) (64비트)
  • Firefox: 105.0.1 (64-비트)

테스트한 html 은 내용상 올리지 못했다. 대략적인 모습은 아래와 같다.

‘Microsoft Print to PDF’ 를 사용해서 pdf 를 만든 경우

firfox 가 가장 좋은 결과를 보여줬다. pdf size 도 가장 작았으며(아마 압축률이 다를수도 있다.), <a> tag 를 그나마 잘 구현해줬다.

chrom/edge 는 pdf 문서내에 link 를 전혀 만들어주지 않았다.

  • from-chrome.pdf : 672,054 bytes
  • from-firefox.pdf : 456,603 bytes
    • 100% 에 대한 pdf 문서의 font size 가 chrome과 edge 대비 더 컸다.
    • ‘너비에 맞추기’ 옵션이 있다.
  • from-edge.pdf : 672,054 bytes

’PDF로 저장’을 사용해서 만든 경우

모든 link 가 잘 만들어졌으며, 문서 ’배율’도 잘 동작했다.

  • from-chrome.pdf : 182,788 bytes
  • from-edge.pdf: 182,682 bytes
    • pdf 만들기’배율’ 옵션이 정상적으로 동작하지 않았다.
  • from-firefox.pdf : 250,844 bytes
    • ‘너비에 맞추기’ 옵션이 있다.