안경잡이개발자

728x90
반응형

※ PyTorch에서 특정한 학습 데이터 세트를 불러와 변형한 뒤에 저장하기 ※

 

  흔히 PyTorch를 이용해 학습을 진행하다 보면, 학습 데이터 세트에 변형을 가하는 경우가 많다. 이미지를 회전시키거나(rotation), 적대적 노이즈를 섞거나(adversarial attack), 이미지에 패치를 붙이거나(patching) 등의 작업을 수행하는 경우가 많다. 그렇다면 하나의 데이터 세트를 불러와 다양한 전처리를 수행한 뒤에, 전처리된 데이터를 저장해 놓고 나중에 사용하고자 한다면 어떻게 하면 될까?

 

  아래는 학습 데이터를 처리한 뒤에 저장하는 예시이다. 우리는 흔히 학습 데이터 세트를 데이터 로더(data loader)를 이용해 배치(batch) 단위로 불러와 학습한다. 이때 필자는 Epoch별로 서로 다른 image transformation을 적용하고, 각 Epoch마다 변형된 데이터 세트를 저장하고자 했다. 그래서 다음과 같이 코드를 작성했고, Epoch마다 전체 학습 데이터 세트를 하나의 Tensor 형태로 통째로 저장(save)하기 때문에, 많은 메모리 용량이 소요된다. (CIFAR-10 기준으로 Epoch당 약 600MB) 그래도 하나의 Tensor를 통째로 저장한다는 측면에서 저장하는 것 자체는 그다지 많은 시간이 걸리지 않았다.

 

epoch = 0 # 현재의 Epoch 명시
save = True # 저장할 것인지

saved_images = None
saved_labels = None

for batch_idx, (inputs, targets) in enumerate(data_loader):
    inputs, targets = inputs.cuda(), targets.cuda()

    """
    자신이 원하는 대로 데이터 세트를 처리하기
        - 처리된 입력 데이터: processed_inputs
        - 처리된 정답 레이블: processed_targets
    """

    # 각 배치(batch)의 데이터를 연결해 하나의 Tensor에 이어 붙이기
    if save:
        if saved_images == None:
            saved_images = processed_inputs
            saved_labels = processed_targets
        else:
            saved_images = torch.cat((saved_images, processed_inputs), 0)
            saved_labels = torch.cat((saved_labels, processed_targets), 0)

# 하나의 Tensor 형태로 처리된 데이터 세트 저장하기(epoch별로 저장)
if save:
    path = root_path + 'train_dataset/' + str(epoch) + '/'
    if not os.path.isdir(path):
        os.makedirs(path)
    torch.save(saved_images.cpu(), path + 'processed_inputs')
    torch.save(saved_labels.cpu(), path + 'processed_targets')

 

  나중에 데이터를 불러올 때는 다음과 같이 torch.utils.data.Dataset 라이브러리를 사용한다. 필자는 단순히 CIFAR-10 학습 데이터 세트에 대해서 만들었기에, 데이터 세트의 크기(length)도 50,000으로 넣었다.

 

class CustomDataset(torch.utils.data.Dataset):
    def __init__(self, images_path, labels_path):
        self.images = torch.load(images_path)
        self.labels = torch.load(labels_path)
        self.length = 50000

    def __getitem__(self, index):
        image_tensor = self.images[index]
        label_tensor = self.labels[index]
    
        return image_tensor, label_tensor

    def __len__(self):
        return self.length

 

  결과적으로 저장된 데이터 세트를 읽어오는 코드 예시는 다음과 같다.

 

images_path = root_path + 'train_dataset/' + str(prev_epoch) + '/processed_inputs'
labels_path = root_path + 'train_dataset/' + str(prev_epoch) + '/processed_targets'
custom_dataset = CustomDataset(images_path, labels_path)
custom_loader = torch.utils.data.DataLoader(custom_dataset, batch_size=batch_size, shuffle=False, num_workers=16)

 

※ 발생할 수 있는 문제 1 ※

 

  참고로 필자의 경우에는, 처음에 저장했던 Tensor를 다시 불러올 때 다음과 같은 CUDA 오류(error)가 발생했다.

 

"RuntimeError: CUDA error: device-side assert triggered"

 

  당시에 문제의 원인을 생각해 보니, 필자는 데이터를 불러와 학습을 진행할 때 DataParallel을 사용하고 있고, Tensor 데이터를 저장할 때는 Tensor를 CPU로 보내지 않고, 단순히 GPU에 올라가 있는 상태에서 Tensor 데이터를 save()했다. 그래서 저장하기 전에 cpu()를 호출하여 CPU로 보낸 상태에서 Tensor를 저장했더니 오류가 해결되었다.

 

※ 발생할 수 있는 문제 2 ※

 

  필자가 처음에 Tensor를 저장할 때는 단순히 이미지를 한 장씩 쪼개서 저장했다. 하지만 필자가 생각했던 것보다 저장되는 Tensor의 크기가 더욱 컸다. 3 X 32 X 32의 크기이기 때문에, 한 장의 이미지라는 점에서 하나당 약 12KB(3,072 X 4 Bytes)를 예상했기 때문이다. 그래서 결과적으로 이미지를 한 장씩 저장하지 않고, 60,000개의 데이터를 전부 하나의 Tensor에 concat으로 (concatenation)을 해서 저장했다. 이렇게 했을 때는 (3,072 X 50,000 X 4 Bytes) = 약 600MB의 크기로 데이터 세트가 저장되었다.

728x90
반응형

Comment +0

728x90
반응형

※ 오류 상황 ※

 

  아래 오류는 PyTorch 프레임워크를 이용하여 CNN 분류 모델의 학습 코드를 돌릴 때 마주쳤던 오류다.

 

  ▶ 오류 메시지: "RuntimeError: Function AddmmBackward returned an invalid gradient."

 

 

※ 오류 발생 원인 ※

 

  일반적으로 CNN에서는 convolutional layers에 기반한 feature extractor에서 나온 결과를 flatten한 뒤에 (벡터터로 변경한 뒤에) linear layer의 입력으로 넣는다. 다만 이때, flattened dimension과 linear layer의 input dimension이 서로 다를 때 발생할 수 있는 오류다.

728x90
반응형

Comment +1

728x90
반응형

※ 본 게시글은 필자의 경험을 기반으로 작성된 글로, 잘못된 정보가 포함되어 있을 수 있습니다. ※

 

  팀뷰어(TeamViewer)를 이용하면 다른 사람과 1:1로 연결하여 무료로 원격 제어 및 화상 통화가 가능하다. 일반적으로 ① 친구가 어려워하는 컴퓨터 작업이 있을 때, 친구의 컴퓨터 작업을 도와주기 위한 목적 등으로 원격 제어를 사용하곤 한다. ② 혹은 집 컴퓨터에 팀뷰어를 설치해 놓고, 집 밖에서 집 컴퓨터를 원격으로 제어하고자 할 때 사용하곤 한다.

 

  실제로 집 컴퓨터에 대하여 원격제어를 열어 놓으면, 중요한 발표 자료를 클라우드에 업로드하지 않았을 때, 급하게 집으로 뛰어가는 불상사를 막을 수 있다. 물론 원격 제어는 잘못 사용하는 경우, 보안 사고로 이어질 수 있기 때문에 조심히 사용해야 한다. 또한 팀뷰어는 기본적으로 유료 프로그램이다. 하지만 상업적인 목적이 아닌 비영리 목적으로 사용하는 일반 사용자의 경우 무료로 사용할 수 있다. 팀뷰어 공식 홈페이지는 아래와 같다. 기본적으로 무료 라이선스의 경우 [비상업적 사용]이 가능하다고 적혀 있다.

 

  ▶ 팀뷰어(Team Viewer) 공식 홈페이지: https://www.teamviewer.com/ko/

 

Home

TeamViewer(팀뷰어)의 원격 데스크탑 접속 솔루션: 원격 컴퓨터에 연결하고 원격 지원 및 온라인 협업을 제공할 수 있습니다 ➤ 개인용은 무료입니다!

www.teamviewer.com

 

   팀뷰어 홈페이지에 접속하여 [무료 다운로드] 버튼을 누른다.

 

 

  팀뷰어를 설치할 때는 간단히 [기본 설정으로 설치]를 진행할 수 있다.

 

 

  이후에 팀뷰어 라이센스(license)을 확인한 뒤에 동의하고 [계속] 버튼을 누른다.

 

 

  최근 팀뷰어를 이용하기 위해서는 [계정]이 필요하다. 따라서 [계정 생성]을 진행한다.

 

 

  다음과 같이 팀뷰어(TeamViewer) 계정을 생성할 수 있다. 이때 [이름]아이디의 역할을 수행한다고 보면 된다. 또한 자신이 기입한 [이메일] 주소로 이메일 인증 메일이 날아온다.

 

 

  결과적으로 팀뷰어 계정 생성이 완료되면 [종료] 버튼을 누르면 된다.

 

 

  그러면 다음과 같이 팀뷰어 계정 확인 요청 메일이 도착한다. [이메일 계정 확인] 버튼을 누르면 된다.

 

 

  다른 사람이 내 컴퓨터에 접속할 때는 나의 [아이디(ID)][비밀번호]를 알려주면 된다. 반대로 내가 접속할 때는 상대방 컴퓨터의 [아이디(ID)]를 입력하고 [연결]을 누른 뒤에, [비밀번호]를 입력하여 원격으로 접속할 수 있다.

 

728x90
반응형

Comment +0

728x90
반응형

  파이썬에서 워드클라우드(wordcloud) 라이브러리를 설치하고자 했다.

 

 

  다만, 설치가 잘 진행되다가 오류가 발생했다. 오류 메시지는 다음과 같다.

 

"error: Microsoft Visual C++ 14.0 or greater is required."

 

  아래의 그림에서부터 알 수 있듯이, 최신 버전의 Microsoft Visual C++ 빌드 툴이 필요하다고 한다. 파이썬의 워드클라우드 라이브러리가 내부적으로 C++ 기반의 확장 프로그램(extension)을 필요로 하는 것으로 보인다.

 

 

  메시지에서도 나와 있듯이 다음의 Build Tools 설치 경로로 이동하면 된다.

 

  ▶ Microsoft C++ Build Tools 설치: https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/

 

Microsoft C++ Build Tools - Visual Studio

Microsoft C++ Build Tools는 Visual Studio 없이 스크립트 가능한 독립 실행형 설치 관리자를 통해 MSVC 도구 집합을 제공합니다. 명령줄에서 Windows를 대상으로 하는 C++ 라이브러리 및 애플리케이션을 빌드

visualstudio.microsoft.com

 

  이후에 [Build Tools 다운로드] 버튼을 눌러 다운로드를 진행한다.

 

 

  설치 프로그램(installer)을 다운로드하여 설치 프로그램을 실행하면 다음과 같은 화면이 등장한다.

 

 

  결과적으로 Visual Studio Installer가 실행되면, 다음과 같이 [C++를 사용한 데크스톱 개발]을 선택하면 된다. 우리가 필요한 건 C++ 빌드 환경이기 때문이다. 결과적으로 [다운로드하는 동안 설치] 버튼을 누르고 [Install]을 진행하면 된다.

 

 

  결과적으로 다음과 같이 다운로드 및 설치가 진행되고 있는 것을 확인할 수 있다.

 

 

  설치가 완료되면 컴퓨터를 재시작하면 된다.

 

 

  컴퓨터 재시작 이후에 다시 wordcloud 라이브러리를 설치하면 정상적으로 설치가 완료된다.

 

728x90
반응형

Comment +0

728x90
반응형

  가끔 Anaconda를 이용해 파이썬 패키지(라이브러리)를 설치할 때 다음과 같은 오류가 발생하곤 한다. 필자의 경우에는 구체적으로 conda install 명령어를 이용해 fbprophet 라이브러리를 설치하고자 할 때, 다음과 같은 오류 메시지가 등장한 경험이 있다.

 

Solving environment: failed with initial frozen solve. Retrying with flexible solve.

 

1. Conda를 최신 버전으로 업데이트하기

 

  가장 먼저 할 일은 Conda를 최신 버전으로 업데이트하는 것이다. 다음의 명령어를 이용해 Conda를 업데이트하고, 다시 설치 명령어를 입력해보자.

 

conda update --all

 

2. Conda 환경(environment)을 생성한 뒤에 설치하기

 

  만약에 위 방법으로 해결이 안 되었다면 이것도 해보자. Conda는 기본적으로 여러 개의 환경을 만들어, 특정한 환경 안에서 다양한 패키지(라이브러리)를 설치할 수 있다. 예를 들어 "study"라는 이름의 환경을 생성하는 명령어는 다음과 같다.

 

conda create --name study

 

  이후에 해당 환경으로 들어가기 위해서activate 명령어를 사용하면 된다. 이제 다시 시도해보자.

 

conda activate study

 

3. Conda의 channel_priority 속성을 끄기

 

  위 방법들이 모두 통하지 않았다면, 다음의 명령어를 이용해 channel_priority 속성을 꺼보자(false).

 

conda config --set channel_priority false

 

728x90
반응형

Comment +0

728x90
반응형

  다양한 버전의 PyTorch를 사용하다 보면 다양한 오류 메시지를 만나곤 한다. 예를 들어 다음의 오류를 확인해 보자. torch.load() 메서드를 이용하여 저장된 PyTorch 모델을 불러오려고 할 때 오류가 발생한다.

 

 

  최신 버전의 PyTorch에서 해당 모델 가중치를 불러오는 것은 문제가 없지만, 이전 버전의 PyTorch를 사용할 때 이러한 오류 메시지가 출력이 되며 정상적으로 모델 파일을 불러오지 못하는 것이다. 이럴 때는 최신 버전의 PyTorch에서 모델 파일을 저장할 때 _use_new_zipfile_serialization 속성의 값을 False로 변경하도록 한다.

 

torch.save(net.state_dict(), 'model_trained.pth', _use_new_zipfile_serialization=False)

 

    이후에 다시 낮은 버전의 PyTorch을 이용해서 새롭게 저장된 모델 파일을 불러왔을 때는 오류 없이 로드(load)하는 것을 확인할 수 있었다.

 

※ 현실적인 문제 ※

 

  모델 가중치 파일을 내가 직접 학습한 경우가 아니라면, ① Google Colab 같은 서비스를 이용하여 임시로 최신 버전의 PyTorch에서 해당 모델을 불러온 뒤에 False 값을 적용하여 모델을 저장하는 것을 추천한다. 그리고 ② 낮은 버전의 PyTorch에서 해당 모델을 불러와 사용할 수 있다.

728x90
반응형

Comment +0

728x90
반응형

※ 오류 설명 ※

 

▶ 오류 메시지: "RuntimeError: CUDA error: no kernel image is available for execution on the device."

 

 

  이 오류는 잘 사용하던 GPU 서버가 있는 상태에서, GPU 장치를 변경했을 때 만날 수 있는 오류(error)다. 보통 GPU를 이용해 모델 학습이나 추론(inference)을 진행할 때 이러한 오류가 발생한다. 출력된 오류 메시지를 확인해 보면 새롭게 설치된 GPU 장치인 NVIDIA RTX A6000의 CUDA capabilitysm_8.6이라고 나와 있다. 하지만, 현재 설치된 PyTorch는 3.7, 5.0, 6.0, 7.0, 7.5와 호환된다고 나와 있다.

 

▶ 메시지: "The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70 sm_75."

 

 

  참고로 자신이 가지고 있는 GPU 장치의 Compute Capability는 다음의 경로에서 확인할 수 있다.

 

  ▶ Compute Capability 확인: https://developer.nvidia.com/cuda-gpus

 

CUDA GPUs

Your GPU Compute Capability Are you looking for the compute capability for your GPU, then check the tables below. NVIDIA GPUs power millions of desktops, notebooks, workstations and supercomputers around the world, accelerating computationally-intensive ta

developer.nvidia.com

 

※ 현재 버전 확인 방법 ※

 

1) NVIDIA 드라이버 버전 확인

 

  NVIDIA driver의 버전을 확인할 때는 nvidia-smi 명령어를 입력한다. 그러면 다음과 같이 NVIDIA driver와 호환되는 CUDA 버전 정보가 출력된다. 참고로 nvidia-smi 명령어를 이용했을 때 출력되는 CUDA 버전(version)은 사용할 수 있는 CUDA의 버전을 의미하므로, 일반적으로 현재 설치된 CUDA 버전보다 같거나 최신 버전이라면 문제가 되지 않는 경우가 많다.

 

Driver Version: 465.19.01, CUDA Version: 11.3

 

2) CUDA 버전 확인

 

  서버에 설치된 CUDA 버전을 확인할 때는 다음과 같이 입력한다.

 

cat /usr/local/cuda/version.txt

 

그러면 CUDA Version 10.1.168와 같이 현재 설치된 CUDA의 버전이 출력된다.

 

3) CUDNN 버전 확인

 

  CUDNN 버전을 확인할 때는 다음의 명령어를 사용한다.

 

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

 

  그러면 다음과 같이 출력된다. 아래 의미는 7.6.0 버전이라는 의미다.

 

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0

 

4) PyTorch 버전 확인

 

  마지막으로 현재 설치된 PyTorch의 버전을 확인할 때는 python을 실행한 뒤에, 다음의 코드를 사용한다.

 

import torch

print(torch.__version__)

 

그러면 1.7.0+cu101와 같이 자신이 PyTorch의 버전이 출력된다.

 

※ 해결 방법 ※

 

  오류 메시지만 고려했을 때, 해결 방법은 간단하다. PyTorch를 재설치하면 된다. 먼저 현재 설치된 PyTorch를 지운다. 필자는 프로그램을 확실히 지우기 위해서 일반적으로 지우는 명령어를 2번 수행한다.

 

pip3 uninstall torch

 

  이후에 Compute Capability를 TORCH_CUDA_ARCH_LIST 환경 변수의 값으로 설정한다.

 

export TORCH_CUDA_ARCH_LIST="8.6"

 

  최종적으로 PyTorch를 재설치한다. CUDA 버전이 10.1이라면 다음과 같이 설치하면 된다. 참고로 f 옵션아카이브 링크를 찾는(finding) 옵션이다.

 

# CUDA 10.1
pip3 install torch==1.7.1+cu101 torchvision==0.8.2+cu101 -f https://download.pytorch.org/whl/torch_stable.html

 

  하지만 이렇게 해도 코드가 정상적으로 동작하지 않을 수 있다. 필자는 동일한 오류가 계속 발생하고 있는 것을 확인할 수 있었다. 찾아본 결과, 기본적으로 8.6 버전(sm_86)은 CUDA 11에 대하여 지원되기 때문에, CUDA 10을 사용하고 있는 것이 문제가 된다고 한다. 필자와 같은 상황에서는 CUDA의 버전이 낮은 것이 근본적인 원인이기 때문에 높은 CUDA 버전으로 CUDA를 재설치(혹은 추가 설치)해야 한다.

 

  ▶ [참고] 이전 버전의 PyTorch 설치https://pytorch.org/get-started/previous-versions/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 

※ 높은 버전의 CUDA 설치 방법 ※

 

  이럴 때는 여러 가지 해결 방법이 있다. 현재 설치된 CUDA 10.1을 제거하고, NVIDIA 드라이버와 호환되는 11.3을 설치할 수 있다. 혹은 현재 존재하는 CUDA 10.1은 그대로 둔 상태에서 새로운 버전의 CUDA를 추가적으로 설치할 수 있다. 필자는 기존에 설치된 CUDA는 내버려 둔 상태로 추가 설치를 진행하겠다.

 

  현재 설치된 CUDA 목록을 확인할 때는 /usr/local/ 경로에 있는 CUDA 폴더들을 확인하면 된다. 예시는 다음과 같다. 확인해 본 결과 CUDA 11.3은 설치되어 있지 않기 때문에, 이를 추가적으로 설치하고자 한다.

 

 

  ▶ CUDA 11.3.0 설치: https://developer.nvidia.com/cuda-11.3.0-download-archive

 

CUDA Toolkit 11.3 Downloads

Resources CUDA Documentation/Release NotesMacOS Tools Training Sample Code Forums Archive of Previous CUDA Releases FAQ Open Source PackagesSubmit a Bug

developer.nvidia.com

 

  자신의 서버 환경에 맞는 CUDA를 설치한다. 참고로 arch 명령어로 자신의 서버 아키텍처 종류를 확인할 수 있다. 또한 uname -a 명령어cat /etc/issue 명령어로 현재 자신의 OS 버전을 알 수 있다. 아래와 같이 플랫폼(platform)을 적절히 기입한 뒤에 설치 명령어를 확인할 수 있다.

 

 

  필자의 경우 다음과 같은 설치(installation) 명령어가 등장했다. 이러한 명령어를 한 줄씩 문제가 없는지 확인하면서 차례대로 입력하면 된다.

 

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

 

  설치가 완료되었다면 다음과 같이 /usr/local 경로새로운 버전의 cuda가 설치 완료된 것을 알 수 있다.

 

 

  이렇게 CUDA가 정상적으로 설치되었다면 ~/.profile 파일을 열어서 다음과 같이 문자열을 추가한다. (자신이 설치한 버전에 맞게 적절한 폴더명을 넣어야 한다. 필자는 11.3을 기입했다.)

 

export PATH=/usr/local/cuda-11.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH

 

  다음과 같이 가장 마지막 줄에 해당 내용을 추가하면 된다.

 

 

  이후에 source ~/.profile 명령어를 이용해 반영하면 된다. 이후에 정상적으로 CUDA 설치가 완료되었는지 버전을 확인한다. nvcc -V 명령어를 사용하여 확인할 수 있다. (만약 nvcc가 설치되어 있지 않다면 sudo apt install nvidia-cuda-toolkit 명령어로 설치할 수 있다.) 결과적으로 다음과 같이 CUDA 11.3 버전으로 정상 동작하고 것을 알 수 있다.

 

 

※ NVIDIA 드라이버 재설치 ※

 

  결과적으로 문제가 해결되었다고 생각했는데, 이번에는 nvidia-smi 명령어를 사용했을 때 다음과 같은 오류 메시지가 출력되었다.

 

 

  그래서 필자는 깔끔하게 NVIDIA driver도 지운 뒤에 다시 설치하고자 했다. 이때는 가장 먼저 다음의 명령어로 NVIDIA driver를 제거할 수 있다.

 

sudo apt-get --purge remove *nvidia*

 

  정상적으로 driver가 완전히 제거되었는지 확인하기 위해 다음의 명령어를 사용할 수 있다.

 

sudo dpkg -l | grep nvidia​

 

  이후에 ubuntu-drivers devices 명령어로 적절한 NVIDIA 드라이버를 추천받자. (이러한 명령어가 동작하지 않는다면 sudo apt install ubuntu-drivers-common 명령어로 설치한다.)

 

 

  NVIDIA 드라이버를 설치하기 위해 가장 먼저 repository를 추가한다.

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update


  이후에 NVIDIA 드라이버를 설치하면 된다. 필자는 470을 추천 받았으므로 다음의 명령어를 사용했다.

 

sudo apt-get install nvidia-driver-470

 

  이후에 nvidia-smi 명령어를 입력했을 때 정상적으로 NVIDIA driver가 구동되는 것을 확인할 수 있다. 참고로 현재 동작 중인 주피터 노트북 서비스가 있다면, 주피터 노트북을 껐다가 다시 구동시켜주도록 하자. 마지막으로 적절한 버전의 PyTorch를 재설치하자. 최종적으로 PyTorch를 제거한 뒤에 다음의 명령어로 최신 버전의 PyTorch를 재설치했다. 이때 CUDA는 11.4보다 낮지만 호환되는 11.3으로 선택했다.

 

pip3 install torch==1.10.2+cu113 torchvision==0.11.3+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

 

  결과적으로 모든 문제가 해결되어 정상적으로 GPU를 활용한 딥러닝 모델 학습 코드가 동작하게 되었다.

728x90
반응형

Comment +0

728x90
반응형

  개인사업자의 경력을 증빙하기 위하여 "폐업사실증명서"를 제출해야 하는 경우가 있다. 이럴 때는 홈택스에 로그인을 한 뒤에 [민원증명] - [폐업사실증명]으로 들어간다.

 

  ▶ 홈택스(Hometax): https://hometax.go.kr/

 

 

  이후에 자신이 발급하고자 하는 내용에 맞게 [폐업사실증명 신청서]를 작성한다.

 

 

  본 예시와 같이 [인터넷열람(화면조회)]를 선택한 뒤에 [신청하기] 버튼을 누르면 다음과 같이 발급 번호가 등장한다. 이때 [발급번호]를 클릭하여 증명서를 열람할 수 있다.

 

 

  이후에 [확인] 버튼을 눌러 증명서를 열람한다.

 

 

  결과적으로 다음과 같이 [폐업 사실 증명서]가 웹으로 출력된다.

 

 

※ 참고 사항 ※

 

  참고로 [인터넷발급(프린터출력)]으로 뽑았다면, 컴퓨터에 PDF 파일로 저장할 수 있다.

728x90
반응형

Comment +0

728x90
반응형

  삼성페이(Samsung Pay)는 삼성전자가 제공하는 [간편 결제 서비스]다. 스마트 폰의 NFC 기술을 이용해서 간단하게 스마트 폰만 가지고도 음식점 등에서 결제할 수 있게 해준다. 실제로 삼성페이 때문에 삼성 갤럭시 스마트 폰을 사용하는 사람도 있을 정도로, 매우 편하게 결제가 가능하다는 장점이 있다. 삼성페이는 삼성 스마트 폰에 기본적으로 설치되어 있다. 삼성 페이(Samsung Pay) 앱을 실행하면 처음에 권한 허용 문구가 나오고, [시작하기]를 통해 삼성페이를 시작할 수 있다.

 

 

  기본적인 [이용약관]에 동의하고, 인증 수단으로 지문을 사용할 수 있는데, 필자는 [나중에]를 선택하여 지문을 사용하지 않도록 했다. 그리고 [카드 추가] 버튼을 눌러 필자가 가지고 있던 카드를 등록했다.

 

 

  기본적으로 삼성 페이(Samsung Pay) 메인 화면에서 [더보기] 버튼을 눌러 [카드]를 선택하여 카드 정보를 확인할 수도 있다.

 

 

  필자는 [내 카드 추가] - [수동으로 카드 입력] 버튼을 눌러 카드 입력 페이지로 이동했다. 그리고 [카드 번호], [만료일], [보안 코드], [카드 비밀번호]를 입력하면 된다. 그리고 휴대폰 번호를 입력하여 [본인 인증]을 진행한다.

 

 

※ 삼성페이 결제 방법 ※

 

  결과적으로 카드 등록이 완료되면 [지갑] - [카드]로 이동하여, 자신이 원하는 카드에 대하여 [비밀번호]를 입력한다. 이후에 음식점이나 백화점에서 결제를 진행할 때 스마트 폰을 주면, 카드 리더기에 대서 결제가 완료된다.

 

728x90
반응형

Comment +0

728x90
반응형

  웹 브라우저에서 특정한 웹 사이트에 접속하면 다양한 문자열을 확인할 수 있습니다. 예를 들어 네이버(Naver)에 접속한 뒤에 "네이버를 시작페이지로"라는 문자열을 다른 문자열로 바꾸고자 한다면 어떻게 하면 될까요?

 

 

  바로 다음과 같은 자바스크립트(JavaScript) 명령어를 사용하면 됩니다. 이때 replaceAll() 메서드를 사용하면 웹 페이지 내에 존재하는 모든 문자열이 교체됩니다.

 

document.body.innerHTML = document.body.innerHTML.replaceAll('변경 전 문자열', '변경 후 문자열');

 

  개발자 도구(F12)를 누른 뒤에 다음과 같이 JavaScript 코드를 이용합니다.

 

 

  결과적으로 다음과 같이 웹 페이지가 변경된 것을 확인할 수 있습니다.

 

 

※ 참고 ※

 

  ▶ 참고 링크: https://stackoverflow.com/questions/5558613/replace-words-in-the-body-text

728x90
반응형

Comment +0