tensorflow 패키지를 활용할 작업이 있어서 m1 실리콘 맥에 설치한 과정입니다.

불과 m1 맥이 출시했던 2~3년 전만 하더라도, m1 프로세서의 맥으로 작업하는 동료들 중 tensorflow 설치로 애먹은 동료들이 떠올랐습니다.

하지만 지금은 매우 쉽게 설치가 되네요.

 

python 3.8버전의 anaconda가 설치된 환경에서 진행하였으며 아래 pip 명령어만 입력해주면 어렵지 않게 설치가 가능합니다.

python3 -m pip install tensorflow
python3 -m pip install tensorflow-metal

 

설치 후 터미널 상에서 테스트한 결과입니다.

% python3
Python 3.8.19 (default, Mar 20 2024, 15:27:52) 
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf

>>> 
>>> tf.__version__
'2.13.0'
>>> tf.config.list_physical_devices('GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
>>>

 

앞으로 더 많은 작업을 쉽게 할 수 있겠네요 .

 

DONE!

Ubuntu 환경에서 pytorch 프로젝트 실행을 위해 설정하던 중 발생한 에러입니다.

 

'ModuleNotFoundError: No module named 'torch_geometric'

단순히 아래처럼 실행하면 되지 않을까 했는데, 여전히 같은 에러가 계속 발생했습니다.

pip install torch-geometric

설치전에..

우선 점검해볼것은 Nvidia 드라이버와 CuDA 설치 유무입니다.

아래 명령어로 각각의 요소들이 설치되었는지 확인을 하고, 설치가 안되었다면 반드시 설치를 해주어야합니다.

nvidia-smi
nvcc --version

Anaconda 환경에서 설치

저는 Anaconda 환경에서 진행하였습니다.

conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
pip install torch-geometric

 

위 명령어들을 순차적으로 진행하면 정상적으로 설치가 되면서 에러가 해결됩니다.

(tf) admin@gpu-server:/usr/local/cuda$ python
Python 3.9.16 (main, Mar  8 2023, 14:00:05) 
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch_geometric

 

GOOD!

 

https://velog.io/@jskim/Windows%EC%97%90%EC%84%9C-Linux-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-with-WSL2

 

Windows에서 Linux 사용하기 (with WSL2)

개발자나 엔지니어가 개발을 하고 서버를 구축하는 등의 일련의 활동을 할 때 Windows OS보다는 Linux, Mac OS가 확실히 편하다. 하지만 Windows OS가 깔린 노트북, PC를 가진 개발자나 엔지니어도 많을터!

velog.io

위 참고글이 정말 많은 도움이 되었습니다.

 

1. PowerShell 에서 WSL 설치

 

2. 커널 업데이트 패키지 설치

 

* 만약 위 커널 업데이트 패키지 설치가 안 될 경우 아래 처럼 윈도우 기능을 꼭 체크해야합니다!

 

windows 환경에서 Docker를 실행할 작업이 생겼습니다.

windows local에 있는 어느 폴더와 docker container간 파일을 주고받으며 이 파일을 파이썬으로 처리하는 작업을 수행합니다

 


Dockerfile 작성

container는 ubuntu base로 python이 설치된 환경으로 생성하였습니다.

# Ubuntu 최신 버전을 기반 이미지로 사용
FROM ubuntu:latest

# 패키지 목록 업데이트 및 필요한 패키지 설치
# --no-install-recommends 옵션 추가
RUN apt-get update && apt-get install -y \
    git \
    vim \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*  # apt-get clean과 유사

# 작업 디렉토리 설정
WORKDIR /workspace

# 컨테이너 시작 시 실행될 명령어
# 여기서는 bash 쉘을 실행하도록 설정합니다.
CMD ["bash"]

 


Docker Image Build

docker build -t ubuntu_custom .

Docker Container 실행

이 부분이 자칫 헷갈릴 수 있는 부분입니다.

'C:\CPImage'라는 경로와 바인딩하기 위해 wsl에서는 해당 경로를 '/mnt/c/CPImage'로 접근할 수 있습니다.

그리고 ubuntu container의 '/app'경로와 바인딩하는 예시입니다.

docker run -d --name ubuntu_container -v /mnt/c/CPImage:/app ubuntu_custom tail -f /dev/null

 

 

바인딩한 윈도우 로컬 경로 폴더 조회
바인딩한 컨테이너의 '/app'경로 폴더 조회

 

각 경로에서 파일을 서로 생성해보면 조회가 되는 것으로 정확히 바인딩 된 것을 확인할 수 있습니다

윈도우 PC에서 서비스할 프로젝트가 시작되었습니다.

윈도우에 Docker를 설치해서 하려다 번거로워서, ASP.NET 개발 할 때 IIS를 사용한 경험을 되살려서 IIS에 Flask서버를 가동하였습니다.

 

아래와 같은 환경에서 설정하였습니다.

  • Anaconda3
  • Windows 10
  • python <= 3.8

아래는 도움받은 블로그 글입니다

https://blog.gapmoe.net/entry/IIS%EC%97%90-Flask-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0
https://urame.tistory.com/entry/IIS%EC%99%80-Flask-Python-%EC%97%B0%EB%8F%99

 


 

1. IIS & CGI 설정

윈도우 OS에 설치되어 있는 IIS를 활성화해줘야합니다.

아래 처럼 '인터넷 정보 서비스(IIS)' 내 항목들과 'CGI'를 체크하여 확인을 누른 후 설치과정을 진행합니다

 


2. FLASK 실행을 위한 설정

다른 서버 어플리케이션과 달리 설정할 변수들이 많아 번거로울 수도 있지만 한 번 세팅해두면 의외로 IIS도 서버 관리에 장점이 많은 어플리케이션입니다.

 

1) python 실행 경로

먼저 Python은 Ananconda3에서 실행되는 환경입니다.

저 같은 경우 가상환경 이름은 'flask'로 지정했으며 python이 실행되는 인터프리터 경로는 아래와 같습니다

C:\anaconda3\envs\flask\python.exe

 

2) 필요한 파이썬 패키지

wfastcgi, flask 두 가지 패키지가 필요합니다. 

아래 처럼 anaconda prompt에서 설치를 진행해줍니다.

(flask) C:\WINDOWS\system32> pip install wfastcgi
(flask) C:\WINDOWS\system32> pip install flask

 

3) flask 웹 서버 경로 설정

iis 가 정상적으로 설치되었다면 

"C:\inetpub\" 디렉토리가 생성됩니다. 

참고로 웹 브라우저상에서 'http://localhost' 경로를 호출하면 아래와 같은 페이지를 불러오게 되며, 기본적인 iis 설치가 완료된 상태임을 확인할 수 있습니다.

 

flask 프로젝트 경로는 아래의 경로에서 실행할 예정입니다.

C:\inetpub\flask

 

'wfastcgi.py'파일을 flask 프로젝트 폴더에 복사해줍니다.

저 같은 경우는 flask라는 anaconda3 가상공간에 wfastcgi 패키지를 설치하였으므로 해당 경로에서 파일을 찾을 수 있었습니다.

그리고 위 파일을 복사하여 flask 프로젝트에 복사해주고 'app.py'파일을 생성해줍니다

 

 


3. IIS와 Python Flask Mapping 설정

여기서 부터가 실제로 설정하는 단계입니다.

IIS 어플리케이션을 실행한 후 사이트 -> 웹 사이트 추가를 해줍니다.

'flask_test'라는 웹 사이트를 추가하였으며 포트는 '5000'으로 지정하였습니다

 

flask_test 웹 사이트의 처리기 매핑 설정 -> 처리기 매핑 클릭

 

우측 상단에 '모듈 매핑 추가',

아래 화면과 같이 설정값을 입력해줘야 합니다.

'파이썬 인터프리터 경로|프로젝트 내 wfastcgi.py 경로'

'|'기호로 연결된다는 점을 유의해야합니다.

C:\anaconda3\envs\flask\python.exe|C:\inetpub\flask\wfastcgi.py

 

마지막으로 FastCGI를 설정해줘야합니다.

IIS내 최상단 장치명 -> FastCGI 설정 클릭 -> 환경변수 설정하여 아래 두 개의 환경 변수를 설정합니다

NAME : PYTHONPATH
VALUE : C:\inetpub\flask  (flask 프로젝트 폴더 경로)
---------------------
NAME : WSGI_HANDLER
VALUE : app.app

 

 


4. Flask Test 페이지 코드 입력

flask 프로젝트 폴더 내 'app.py'파일에 아래와 같은 코드를 입력합니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, World!"

if __name__ == '__main__':
    app.run()

 

그리고 웹 사이트 생성하면서 설정한 포트(5000)로 접속하여 결과값을 확인합니다.

 python 코드로 작업한 프로그램을 container 형태로 배포할 일이 자주 생깁니다.

문제는 python 코드가 실행되기 위해서는 import된 python package들이 설치가 된 환경이 필요합니다.

 

 그러기 위해서 pc에서 작업할 때 설치된 package들은 아래 명령어를 통해 ' requirements.txt' 파일에 저장, 추출이 가능합니다

$ pip freeze > requirements.txt

하지만 위 명령어는 설치된 모든 패키지가 출력되므로 Dockerfile에서 아래와 같은 명령어가 실행될 때 불필요한 package들도 모드 설치되어 container의 용량과 설치시간이 늘어날 수 있는 비효율적인 상황이 발생하죠.

RUN pip3 install -r requirements.txt

 

그래서 'pipreqs'라는 명령어를 활용하면 위 문제를 해결할 수 있습니다.


pipreqs

간단한 웹페이지를 flask module로 제작하였습니다.

아래는 app.py라는 파일에 저장되어 있는 import 선언 부분입니다.

from flask import Flask, render_template, request, redirect, url_for, session
from werkzeug.utils import secure_filename
import os
import requests
import os
from datetime import datetime
import json
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
from flask_caching import Cache

위에 해당하는 모듈들만 container에 설치하면 되는데 어떻게 추출을 할까요.

터미널을 켜서 'app.py'가 있는 경로로 이동한 후에 'pipreqs'라는 명령어만 입력해주면, 같은 경로에 아래처럼 'requirements.txt'이 생성됩니다.

 하지만 위 txt파일을 Dockerfile을 통해서 build하게 되면 문제가 발생합니다.

바로 중복되있는 패키지들 때문인데요.

 패키지들이 다른 버전마다 설치가 된 경우 발생하는 문제입니다.

위 처럼 버전을 체크한 후에 중복되있는 패키지들을 제거하고 docker build를 실행할 경우 문제가 발생하지 않게됩니다.

python 코드가 실행되는 ubuntu기반의 docker container를 생성할 때 발생하는 오류입니다.


ERROR: failed to solve: process "/bin/sh -c apt-get install -y python3 python3-pip" did not complete successfully: exit code: 100
# base image
FROM ubuntu:latest

# 필요한 패키지 설치
RUN apt-get install -y python3 python3-pip

RUN pip3 install -r requirements.txt

 위 처럼 Python이 설치된 Ubuntu환경의 container를 생성하고자 Dockerfile을 작성하였습니다.

별로 문제가 없는 것 처럼 보이지만 Dockerfile에 어떤 문제가 있을까요.

 해결책은 아주 간단합니다.

Ubunut는 패키지를 설치하기전에 아래 명령어가 먼저 실행되어야 합니다.

apt-get update

 

그래서 아래처럼 수정하면 이상없이 Dockerfile이 build 됩니다.

# base image
FROM ubuntu:latest

# 필요한 패키지 설치
RUN apt-get update
RUN apt-get install -y python3 python3-pip

(이하 생략)

+ Recent posts