Category: Python

  • ray, OOM

    ray를 이용해서 처리 속도를 높이고 있다. 그런데 왠지 모르게 몇몇 부분에서 OOM 오류가 발생했다. Graphite를 이용한 정보 수집으로는 그런 낌새를 도무지 알아차릴 수 없었다. 그래서 의심가는 부분들을 하나씩 확인해 보았다. 7초당 한 번 정도 graphite 정보를 수집했다. top 으로 1초 마다 확인을 해보니 실제로 free 메모리가 매우 줄어드는 경우가 짧게나마 있는 것을 확인할 수 있었다.

    obj 파일을 만들 때에만 메모리 부족이 발생하고 있었다. 그래서 사용하는 cpu를 3개 줄여서 하니 속도는 느리지만 무사히 해당 과정을 종료할 수 있었다.

    오늘의 교훈. OOM이 발생할 경우 좀 더 세밀하게 살펴 봐야한다.

  • 상위 폴더 파일 import

    코파일럿 가라사대 sys.path.append를 이용하여라..

    코파일럿이 알려진 코드는 다음과 같다. 하지만 난 sys.path.append만 이용했다.

    import sys
    import os
    
    if '__file__' in globals():
        # 현재 파일의 디렉토리
        current_dir = os.path.dirname(os.path.abspath(__file__))
    else:
        # Jupyter Notebook이나 다른 환경에서 사용할 디렉토리
        current_dir = os.getcwd()
    
    # 상위 폴더 경로
    parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
    
    # 상위 폴더를 sys.path에 추가
    sys.path.append(parent_dir)
    
    # 상위 폴더에 있는 .py 파일 불러오기 (예시로 상위 폴더에 my_module.py 파일이 있다고 가정)
    import my_module
    
    # my_module 내 함수나 클래스 사용
    my_module.my_function()
    
  • RAY_DEDUP_LOGS=0

    ray 에서 로그를 모두 확인하고자 할 때에는 위 내용이 필요하다고 한다. 이것을 선언하는 위치가 중요하다.

    import os
    os.environ['RAY_DEDUP_LOGS'] = '0'
    import ray

    ray 를 불러오기 전에 해야 한다.

  • 영상 이미지로 mesh 만들기

    안 될때는 안 되더니, 될 때는 또 금방 된다. 이번에는 copilot이 도움이 컸다. 몇몇 부분에서 수학적인 계산이 필요한 부분이 있었는데 관련 부분을 충분히 입력하면 거의 동작 가능한 수준에서 만들어 준다.

    더 촘촘하게 mesh를 구성해보려고 했는데 2가지 이유로 안했다. 첫 번째로는 메모리 부분이다. 사소한 부분일 것 같기는 한데 numpy에서 오류가 난다. 두 번째는 현재 가로 해상도는 대략 최대 1.6mm 이다. 표면이 거칠기는 한데 그것보다는 thickness가 더 큰 영향을 미친다고 본다.

    Blender에서 불러온 다음 표면을 살짝 부드럽게 해주면 좀 더 그럴듯하다.

    콧구멍과 귓볼 처럼 굴곡이 심한 부분은 잘 안된다. 캡처 사진에서는 잘 안 보이는데 콧구멍이 5개쯤 된다.

    이 논문에서 영감을 받아서 진행했었다. 이제 저 아래쪽 그림을 보고 너무 겁먹지 않아도 좋을 듯 하다. 그 이유는 아래쪽 이미지처럼 잘 복원하려면 MRI 화질이 매우 매우 좋아야 한다. 작정하고 복원을 위한 시퀀스를 구성하지 않은 이상 짜부러진 얼굴이 나올 가능성이 높다.