import glob
import os

data_Path = os.path.join(os.getcwd(), 'data')

# # '*'는 임의 길이의 모든 문자열을 의미한다.
output = glob.glob(data_Path + '/*.txt')
print(output)
print('-' * 20) 

# '?'는 한자리의 문자를 의미한다.
output = glob.glob(data_Path + '/temp?.txt')
print(output)
print('-' * 20)  

# '[2-3]'은 2~3사이의 숫자를 의미한다.
output = glob.glob(data_Path + '/temp[2~3]?.txt')
print(output)
print('-' * 20)

# recursive=True는 하위경로 검색여부이다.
output = glob.glob(data_Path + '/*.txt', recursive=True)
print(output)

아이패드 미니6 셀룰러 구입

아이패드 미니5를 잘쓰고 있는도중 짭슬펜슬이 충전이 안되는 상태가 되면서 부터 미니6에 관심이 가기 시작했다. 펜슬을 잘 안쓰는데 왠지 애플펜슬이 가지고 싶고 미니5에서 영상을 볼때 레터박스가 커보이고 왠지 미니6로 바꾸면 뭔가 더 좋을것같은 그냥 지름병이 생겼다. 그렇게 지름병을 잘 참고있었는데 어그날 우울한 일이 있었다. 그날따라 내가 이렇게 참으면서 살면 뭐하나 싶은 생각이 드는 찰나 쿠팡에 접속해 보니 스타라이트 미니6가 할인을 하고있었다. 애플펜슬2세대도 할인을 하고있었다. 그래서 최저가는 아니지만 그냥 샀다.

제품을 개봉할때 느낌은 정말 좋은것 같다. 새거를 뜯는 기분이 아주 좋다.

애플펜슬은 확실히 짭슬펜슬이랑 비교가 안될정도로 좋은것 같다. 물론 가격도 비교가 안될정도로 비싸다.

스타라이트 색상이 핸드폰처럼 완전 흰색이 아니라서 조금 실망했다. 왜 아이폰13하고 색상이 똑같다고 생각했는지 모르겠다 여러번 보긴했는데 생각보다 골드 느낌이 강하다.
많이 사용해 보지는 않았지만 애플펜슬은 짭슬펜슬보다 확실히 좋은것 같다. 미니6도 미니5보다 화면이 커져서 좋았다. 성능은 좋아지긴 했지만 미니로 하는게 별거 없어서 체감은 되지 않는다.
미니6에 젤리스크롤 이슈가 있어서 걱정했는데 나는 전혀 모르겠다. 민감한 사람은 느낄지도 모르겠다. 우울한 마음에 갑자기 지출을 하게되었지만 기분은 좋다. 이 좋은기분이 이어지도록 잘 샀다는 생각이 들었으면 좋겠다.


aliases : [GPU상태확인, [[ubuntu]]]
tags : ubuntu명령어, NVIDIA,


NVIDIA GPU 상태 확인

데이터 학습시 GPU에서 잘동작하는지 확인하는 방법으로 GPU의 상태를 확인한다
터미널에 다음과 같이 입력하면 상태를 확인할 수 있다

$ nvidia-smi

아래와 같은 테이블이 표시된다

  • Driver Version
    Driver Version: 510.47.03 현재 설치되어 있는 GPU Driver Version

  • CUDA Version
    CUDA Version: 11.4 현재 설치되어 있는 CUDA Version
    CUDA는 2개의 API를 가지고 있는데, 하나는 runtime API이고 다른 하나는 driver API 라고 한다 알고있는 Version과 다르다면 runtime API와 driverAPI를 별도로 설치한것이다

  • GPU Fan
    GPU Fan 0 48% GPU의 번호와 GPU의 fan 사용량을 %로 표시

  • Name
    NVIDIA RTX A6000 GPU의 model명 표시

  • Temp
    39C 현재 설치되어있는 GPU의 현재 온도를 섭씨로 표시
    온도가 너무 높으면 성능 저하 및 GPU Drop이 발생할 수 있다

  • Perf
    P8 Performance mode표시
    P0 ~ P12까지 존재하며 숫자가 작아질수록 GPU의performance가 좋은 상태

  • Persistence-M
    On: 파워 지속성 모드 on/off 표시
    기본적으로 default mode는 off이며 on상태시 power limit을 설정할 수 있다
    power를 얼마나 지속할지 정해줄 수가 있다 GPU 사용시에 지연 시간을 아끼는 장점이 존재하지만, 전력을 더 낭비 한다

  • Pwr:Usage/Cap
    23W /300W GPU의 현재 전력의 사용량과 최대 용량을 표시

  • Bus-ID
    00000000:08:00.0 메인보드 마다 가지고 있는 PCI slot에 부여된 Bus-ID
    이를 통해서 사용하는 GPU 번호와 메인보드의 PCI slot을 매칭시킬 수 있다

  • Disp.A
    off Display를 출력하는지 표시
    모니터에 연결된 GPU는 on으로 변경된다

  • Memory-Usage
    15MiB/49140MiB GPU의 memory와 GPU의 총 memory를 표시

  • GPU-Util
    0% GPU의 현재 사용량 표시
    100%의 성능 중 얼마만큼 사용하고 있는지를 나타내고 있다

  • Volatile Uncorr.ECC
    off ECC모드 on/off 표시
    기본적으로 default mode는 on이며 Error count가 증가한다
    count가 증가하면 system hang이 발생한다 그래서 off로 설정하고 작업하는 곳이 많다 그리고 off로 설정하게 되면 신기하게도 GPU memory 총량이 늘어난다고 한다

  • Compute M.
    off Compute-Mode를 표시

    • 0 - Default
    • 1 - exclusive thread
    • 2 - prohibited
    • 3 - exclusive process mode
  • MIG M.
    N/A MIG 표시
    NVIDIA GPU를 slice하는 기능으로, MIG M은 MIG-Mode의 약자이고 MIG는 Multi-Instance GPU의 약자이다. CUDA application을 실행시 최대 7개의 개별 GPU instance로 안전하게 분할하여 여러 사용자에게 별도의 GPU를 제공하여 작업을 가속화하는데 도움을 준다 여러개의 instance를 지원하는 MIG는 오로지 NVIDIA A100 이상 델에서만 지원이되고 이외에도 필요조건이 존재한다

  • Processes
    현재 GPU가 잡업하고 있는 Process를 표시
    작업을 하게되면 Process가 늘어난다

nvidia-smi Live Check

GPU를 이용해서 작업을 하다보면 GPU를 잘사용하는지 계속해서 확인이 필요할때가 있다
이럴때는 watch 명령을 이용해서 갱신되는 정보를 확인하면 된다
-n 1 은 시간간격을 의미하며 1은 1초마다 갱신하면서 보겠다는 뜻이다

$ watch -n 1 nvidia-smi

ctrl + c를 누르면 원래 화면으로 돌아간다

-d 옵션을 주고 변경되는 부분을 하이라이트 시킬수 있다

$ watch -d -n 1 nvidia-smi

nividia-smi Option

-q --query Display GPU or Unit info

$ nvidia-smi -q


GPU의 거의 모든 정보를 보여준다 필요에 따라서 grep 명령어를 통해 필요한 정보만 볼수도 있고 별도의 옵션을 통해 필요정보를 따로 확인할 수 있다

-d, --display Display only selected information MEMORY, ECC 등..

$ nvidia-smi -q -d memory
$ nvidia-smi -q -d ecc

memory 조회

ecc 조회

-q 옵션에서 나온 GPU정보에서 필요한 정보만 표시한다

-i, --id Target a specific GPU

$ nvidia-smi -q -d memory -i 0,1

-i 옵션을 사용하면 필요한 GPU만 선태하여 간략하게 볼 수 있다
다수의 GPU를 사용한다면 유용하지만 현재는 GPU가 하나이기때문에 -i 옵션을 안넣은것과 결과가 같다

-L, --list-gpus Display a list of GPUs connected to the system

$ nvidia-smi -L


GPU의 리스트가 나오고 UUID(범용 고유 식별자)가 표시된다

-r, --gpu-reset

$ nvidia-smi -r

GPU H/W 상태를 재설정 하는 리셋 옵션

-e, --ecc-config

$ nvidia-smi -e 0

0은 Disabled, 1은 Enabled 리부팅후 적용된다

'개발 환경' 카테고리의 다른 글

VS 코드조각(CodeSnippet) 만들기  (0) 2022.05.02
VSCode 원격접속  (0) 2022.04.22
VSCode venv 가상환경 설정  (0) 2022.04.20

Requests를 이용하여 URL 파일 다운로드 저장

다운로드 URL을 가지고 파일을 다운받아 저장하여 보자
request모듈은 PUT, GET, POST, HEAD, PATCH, DELETE, OPTIONS 가 있다
요청 방식에따라 알맞은 메소드를 사용하면 된다

일반적인경우

get을 사용하여 다운로드 받을수 있다

import requests

url = 'https://www.facebook.com/favicon.ico'
file = requests.get(url)

open('D:\\facebook.ico', 'wb').write(file.content)

로그인이 필요한경우

로그인이 필요한경우는 세션을 만든뒤에 로그인을 해주고 그뒤에 파일을 요청해야 파일다운로드가 가능하다

  • 다운받을 사이트의 로그인 동작확인
  • 로그인요청
  • 로그인 후 파일요청

사이트마다 다르기는 하겠지만 보통 ID, PW를 입력받고 로그인 절차를 진행하게 될것이다 요새는 SCRF정보를 로그인정보에 포함하거나 로그인 URL에 정보를 포함하여 보안 검사를 하는것 같다 지금 테스트 하는 사이트는 from태그에 action 속성을 써서 로그인 요청을 할때마다 URL이 변경된다

사이트 정보를 확인해보자 브라우저에서 개발자 툴킷을 실행한다 보통 단축키가 F12

ID, PW입력 Input태그의 ID속성 form 태그의 action속성을 확인한다 로그인정보 입력시에 넣어야한다

ID와 PW를 입력할 속성을 확인하였으니 로그인 정보에 해당하는 ID를 넣어서
로그인한 세션을 반환하는 펑션을 만든다

import requests
from bs4 import BeautifulSoup as bs

LOGIN_INFO = {
    'login': 'test_user', # ID입력 속성 ID, <<login_id>>
    'password': '1234'    # PW입력 속성 ID, <<login_pw>>
}

def get_login_session(url):
    s = requests.Session()
    # html소스 가져오기
    first_page  = s.get(url, verify=False)
    html = first_page.text
    soup = bs(html, 'html.parser')
    # from 태그 중에서 method가  post인 것을 찾음.
    form_tag = soup.find('form', {'method': 'post'}) 
    if(form_tag is not None):
        print(form_tag['action'])
        login_url = default_url + form_tag['action']
        login_result = s.post(login_url, data=LOGIN_INFO, verify=False)
        return s

다운로드 url에 접속하면 로그인페이지가 나온다 first_page에는 따라서 로그인 페이지의 html이 들어있다
BeautifulSoup을 이용하여 원하는 태그를 가져오고 속성 action값을 확인한다
테스트 사이트는 기본 url뒤에 action속성값을 추가하여 url을 생성하여서 기본url뒤에 action속성값을 더해서 login_url을 만든다
login_urlLOGIN_INFO를 정보를 담아서 post 메소드를 실행한다
verify 옵션은 ssl인증서 확인 비활성화 옵션이다
login_result의 login_result.status_code의 값이 200이면 로그인 성공이고 400, 404등의 코드이면 로그인 실패이다 코드에 따라 문제를 확인하여 해결하면 된다

저장하는 코드를 추가하여 다운로드 하여보자

import requests
from bs4 import BeautifulSoup as bs

download_url = 'https://localhost:8000/files/test.txt?827cc19%7Cb09b72a6db1b79586b7d3e6e5bb4ac5d%7C1652694385'
default_url = 'https://localhost:8000/
LOGIN_INFO = {
    'login': 'test_user', # ID입력 속성 ID, <<login_id>>
    'password': '1234'    # PW입력 속성 ID, <<login_pw>>
}

def get_login_session(url):
    s = requests.Session()
    # html소스 가져오기
    first_page  = s.get(url, verify=False)
    html = first_page.text
    soup = bs(html, 'html.parser')
    # from 태그 중에서 method가  post인 것을 찾음.
    form_tag = soup.find('form', {'method': 'post'}) 
    if(form_tag is not None):
        print(form_tag['action'])
        login_url = default_url + form_tag['action']
        login_result = s.post(login_url, data=LOGIN_INFO, verify=False)
        return s

session = get_login_session(download_url)
file = session.get(download_url)
open('D:\\test.txt', 'wb').write(file.content)

test.txt 파일이 다운로드가 된다

'개발' 카테고리의 다른 글

[Python] glob으로 경로 검색  (0) 2022.06.17
[Python] SMB서버 파일 읽어서 압축 저장하기  (0) 2022.05.12

aliases : [서버파일다운, 파일압축, 이미지바이트배열변환]
tags : 서버파일저장, 압축파일저장, SMBConnection


로컬에 파일을 저장하지 않고 압축파일만 저장해보자

서버에서 파일을 읽어서 D:/temp.zip로 저장한다

<<temp>>항목은 알맞게 변경하자


from smb.SMBConnection import SMBConnection
import platform   

user = <<user>>
pssward = <<pssward>>
sharName = <<sharName>>
ip = <<ip>>
path = <<path>>
extension = 'jpg'  

def make_datapath_list(conn, sharName, path, extension):
    """
    서버의 폴더 하위의 모든 파일중 extension을 포함하는 해당하는 리스트를 만든다
    extension: 이름의 일부분이나 확장자를 주면됨
    """
    path_list = []      
    dir = conn.listPath(sharName, path)      
    for e in dir:
        if e.isDirectory and e.filename not in ['.', '..']:
            filepath = path + '/' +e.filename
            path_list.extend(make_datapath_list(conn, sharName, filepath, extension))                
        elif extension in e.filename:
            path_list.append(path + '/' +e.filename)
    return path_list  

#SMB 연결
conn = SMBConnection(user, pssward, platform.uname().node,
        sharName, domain='WORKGROUP', use_ntlm_v2=True)
conn.connect(ip, 139)  



#파일 목록 구하기

path_list = make_datapath_list(conn, sharName, path, extension)  

#압축없이 파일 저장 하기
# for path_item in path_list:
#     split_path = path_item.split('/')  # 파일명 구하기
#     fileName = split_path[-1]
#     with open('D:/temp/' + fileName, 'wb') as fp:
#         conn.retrieveFile(sharName, path_item, fp)

#압축하여 파일저장
#로컬에 Zip파일만 저장됨
flo = BytesIO()        
images = []          

# 파일읽어옴
for path_item in path_list:
    conn.retrieveFile(sharName, path_item, flo)
    flo.seek(0)          
    split_path = path_item.split('/')  # 파일명 구하기
    fileName = split_path[-1]
    images.append([fileName, flo])    # [파일명, 받은파일]
    # print(split_path[-1]) # 이름출력



# 읽은파일 압축하여 저장
zip_file_bytes_io = BytesIO()
with ZipFile(zip_file_bytes_io, 'w') as zip_file:
    for image_name, bytes_stream in images:
        zip_file.writestr(image_name, bytes_stream.getvalue())   

with open('D:/temp.zip', 'wb') as f:    
    f.write(zip_file_bytes_io.getvalue())    

conn.close()

'개발' 카테고리의 다른 글

[Python] glob으로 경로 검색  (0) 2022.06.17
[Python] Requests를 이용하여 URL 파일 다운로드 저장  (0) 2022.05.19

aliases : [VS, Snippet, 조각]
tags : Snippet CodeSnipeet Tool


코드조각(CodeSnippet)

스니펫(snippet)은 재사용 가능한 소스 코드, 기계어, 텍스트의 작은 부분을 일컫는 프로그래밍 용어이다. 사용자가 루틴 편집 조작 중 반복 타이핑을 회피할 수 있게 도와준다.[1]

코드 조각 템플릿

  • 코드조각은 XML로 구성되어있다
  • 코드조각 기본형태는 아래와 같다
  • <?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title></Title> </Header> <Snippet> <Code Language="CSharp"> <![CDATA[]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>

코드조각 만들기

  • XML 만들고 위에 표시된 템플릿을 추가한다
  • 각각의 요소를 입력한다
  • 파일의 확장자를 snippet으로 저장하자 ex) Test.snippet
  • C:\Users\사용자\Documents\Visual Studio 2022\Code Snippets\Visual C#\My Code Snippets 경로에 파일을 넣는다
  • Visual Studio에서 사용한다

코드조각 작성 예

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>TestSnippet</Title>
            <Author>Test</Author>
            <Description>Property 추가 코드조각</Description>
            <Shortcut>aprop</Shortcut>
        </Header>
        <Snippet>
         <!-- 추가되는 코드 내용 -->
            <Code Language="CSharp">
                <![CDATA[  
                /// <summary>
                /// $Name$
                /// </summary>        
                public $Type$ $Name$
                {
                    get { return _$Name$; }
                    set
                    {
                        _$Name$ = value;
                        OnPropertyChanged();
                    }
                }
                public $Type$ _$Name$;]]>
            </Code>
            <!-- 코드조각 사용시 사용자가 부분교체 할 수 있다 -->
            <!-- 미사용시 Declarations 요소를 삭제하자 -->
            <Declarations>                
                <Literal>
                    <ID>Type</ID> <!-- $Type$으로 지정된 부분 교체 -->
                    <ToolTip>Property 타입을 입력하세요.</ToolTip>
                    <Default>string</Default> <!-- 기본값 -->
                </Literal>
                <Literal>
                    <ID>Name</ID> <!-- $Name$으로 지정된 부분 교체 -->
                    <ToolTip>Property명을 입력하세요.</ToolTip>
                    <Default>Name</Default> <!-- 기본값 -->
                </Literal>
            </Declarations>
            <!-- 작성시 네임스페이스 추가됨 -->
            <!-- 미사용시 Imports요소를 삭제하자 -->
            <Imports> 
                <Import>  
                    <Namespace>System.IO</Namespace>
                </Import>
            </Imports>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

코드조각을 작성후 VS를 실행하여 확인해보자

도구-> 코드조각 관리자 실행

2022-05-02-121808.png

코드 조각에 추가된것이 확인된다

2022-05-02-122042.png

]

코드 작성시 바로 사용이 가능하다

참고
https://docs.microsoft.com/ko-kr/visualstudio/ide/walkthrough-creating-a-code-snippet?view=vs-2022

'개발 환경' 카테고리의 다른 글

[ubuntu] NVIDIA GPU 상태 확인  (0) 2022.06.07
VSCode 원격접속  (0) 2022.04.22
VSCode venv 가상환경 설정  (0) 2022.04.20

aliases : [VisualStudioCode 원격접속]
tags : Tool/VSCode Remote


VSCode 원격접속

Remote SSH 설치

  • Extensions (ctrl+shift+x)-> remote 검색 하여 설치

2022-04-22-132506.png

Remote 접속

  • 모든 명령 표시(ctrl+shift+p) -> add new 검색 -> Remote-SSH: Add New SSH Host...
  • 접속 IP(test@1.1.1.1) 입력하여 Config 생성
    2022-04-22-133430.png
  • 모든 명령 표시(ctrl+shift+p) -> connect to host 검색 -> Remote-SSH: Connect to Host...
    2022-04-22-135215.png
  • 등록된 서버 선택
  • 운영체제 선택
  • 암호입력
  • 왼쪽 하단에 접속확인
  • 폴더를 열어서 작업시작

'개발 환경' 카테고리의 다른 글

[ubuntu] NVIDIA GPU 상태 확인  (0) 2022.06.07
VS 코드조각(CodeSnippet) 만들기  (0) 2022.05.02
VSCode venv 가상환경 설정  (0) 2022.04.20

aliases : [venv, VSCode, 가상환경]
tags : venv Tool/VSCode Tool


VSCode venv 가상환경 사용방법

VisualStudioCode 터미널 설정

  • setting -> Features -> terminal -> Default Profile: Windows
  • Default Profile 검색
  • 원하는 항목 선택

2022.jpg

venv 생성

python -m venv venv

(venv) 활성화

window pip 버전 업그레이드

(venv) D:\KFPratice\Pratice3>python -m pip install --upgrade pip

kfp 설치

pip install kfp --upgrade

tenserflow 설치

pip install --upgrade tensorflow

'개발 환경' 카테고리의 다른 글

[ubuntu] NVIDIA GPU 상태 확인  (0) 2022.06.07
VS 코드조각(CodeSnippet) 만들기  (0) 2022.05.02
VSCode 원격접속  (0) 2022.04.22

+ Recent posts