Camera connection time is long
Problem
카메라가 처음으로 PC에 연결되는 데는 시간이 오래 걸립니다.
Cause
OpenCL 커널은 카메라가 연결된 특정 하드웨어에 맞춰 빌드되는데, 카메라가 PC에 연결되기 전까지는 어떤 하드웨어인지 알 수 없습니다. 이러한 커널 빌드는 전체 연결 시간의 상당 부분을 차지하며, 프로세스에서 카메라가 처음 연결될 때 수행됩니다.
프로세스가 계속 활성 상태인 경우(특히 Zivid 애플리케이션) 커널을 다시 빌드할 필요가 없습니다.
Solution
카메라에 연결할 때마다 커널을 다시 빌드할 필요가 없도록 커널을 캐시할 수 있습니다. 처음 연결할 때는 여전히 느리지만, 그 이후로는 연결 속도가 빨라집니다. 사용 중인 하드웨어에 대한 지침을 따르세요.
Intel 드라이버를 최신 버전으로 업그레이드하면 Intel Driver & Support assistant 를 사용하여 OpenCL 커널을 캐싱할 수 있습니다. 캐싱이 제대로 되는지 확인하려면 %LocalAppData%/NEO/neo_compiler_cache 폴더가 존재하고 비어 있지 않은지 확인하세요.
Intel 드라이버를 업그레이드해도 문제가 해결되지 않으면 수동으로 캐싱을 허용해 보세요(실험적). 자세한 내용은 아래 드롭다운을 참조하세요.
Manually enabling caching (Experimental)
이 방법은 Intel Graphics Compute Runtime 에서 더 이상 사용되지 않고 실험적인 것으로 간주되지만, 드라이버가 업데이트될 때까지 임시 해결책입니다. 위 링크에서 언급된 Windows용 cl_cache 의 제한 사항을 숙지하고, 프로덕션 환경이 아닌 환경에서만 이 방법을 고려하세요.
캐시된 커널을 저장할 폴더를 만듭니다(예
%LocalAppData%/NEO/neo_compiler_cache)새 환경 변수
cl_cache_dir추가하고 해당 값을 캐시 폴더 경로로 설정합니다(예%LocalAppData%/NEO/neo_compiler_cache)
변경 사항을 적용하려면 컴퓨터를 다시 시작해야 할 수도 있습니다.
대부분의 NVIDIA GPU와 드라이버는 기본적으로 캐싱 기능이 켜져 있습니다. 연결 속도가 여전히 느리다면 NVIDIA GPU 용 최신 드라이버로 업데이트해 보세요.
캐싱이 올바른지 확인하려면 %AppData%/NVIDIA/ComputeCache 폴더가 있고 비어 있지 않은지 확인하세요.
OpenCL 커널을 캐싱할 수 있도록 OpenCL 드라이버를 최신 버전으로 업그레이드하세요.
sudo apt update && sudo apt upgrade intel-opencl-icd
저장소의 최신 버전으로 충분하지 않으면 Intel 에서 출시된 최신 패키지를 사용할 수 있습니다. 캐싱이 제대로 작동하는지 확인하려면 $HOME/.cache/neo_compiler_cache 폴더가 존재하고 비어 있지 않은지 확인하세요.
인텔 드라이버를 업그레이드해도 문제가 해결되지 않으면 캐싱을 수동으로 허용할 수 있습니다. 자세한 내용은 아래 드롭다운을 참조하세요.
Manually enable caching
캐시된 커널을 저장할 폴더를 만듭니다(예
$HOME/.cache/neo_compiler_cache)새로운 환경 변수
cl_cache_dir추가하고 해당 값을 캐시 폴더의 경로로 설정합니다(예$HOME/.cache/neo_compiler_cache)
mkdir $HOME/.cache/neo_compiler_cache
export cl_cache_dir=$HOME/.cache/neo_compiler_cache
캐싱은 이제 현재 세션 동안 지속되어야 합니다.
대부분의 NVIDIA GPU와 드라이버는 기본적으로 캐싱 기능이 켜져 있습니다. 연결 속도가 여전히 느리다면 NVIDIA GPU 용 최신 드라이버로 업데이트해 보세요.
캐싱이 올바른지 확인하려면 $HOME/.nv/ComputeCache 폴더가 존재하고 비어 있지 않은지 확인하세요.
Docker
Docker 컨테이너에서 카메라에 연결하는 경우, 첫 번째 연결을 개선하기 위해 호스트의 캐시 디렉터리를 컨테이너의 루트에 마운트해야 합니다. 이는 각 Docker 컨테이너가 자체 파일 시스템을 가지며, 컨테이너가 시작될 때마다 캐시 디렉터리가 비어 있기 때문입니다.
아래 지침은 카메라와의 첫 번째 연결을 개선하기 위한 것이므로 컨테이너를 처음 실행할 때만 적용됩니다. 호스트 머신에 이미 캐시된 커널이 필요합니다.
Windows는 현재 Docker에서 지원되지 않습니다. OpenCL이 Docker 컨테이너의 Windows에서 완전히 지원되지 않기 때문입니다.
커널 캐시 위치는 NEO_CACHE_DIR 환경 변수를 기반으로 하며, 호스트 머신에서는 기본값 $HOME/.cache/neo_compiler_cache 입니다. 캐시를 공유하려면 컨테이너를 실행할 때 이 디렉터리를 루트 디렉터리에 마운트하세요.
홈 디렉토리에 루트가 소유한 파일이 생성되는 것을 방지하려면 먼저 캐시를 루트 디렉토리에 복사합니다.
sudo rsync -r --mkpath "$HOME"/.cache/neo_compiler_cache/ /root/.cache/neo_compiler_cache/
sudo docker run --interactive --tty --device=/dev/dri --volume /root/.cache/neo_compiler_cache:/root/.cache/neo_compiler_cache <image>
여기서 <image> 실행하려는 이미지의 이름입니다.
커널 캐시는 호스트 머신의 $HOME/.nv/ComputeCache 에 저장됩니다. 실행 시 컨테이너의 루트 디렉터리에 이 디렉터리를 마운트하여 캐시를 공유하세요.
홈 디렉토리에 루트가 소유한 파일이 생성되는 것을 방지하려면 먼저 캐시를 루트 디렉토리에 복사합니다.
sudo rsync -r --mkpath "$HOME"/.nv/ComputeCache /root/.nv/ComputeCache
sudo docker run --interactive --tty --device=/dev/dri --gpus=all --volume /root/.nv/ComputeCache:/root/.nv/ComputeCache <image>
여기서 <image> 실행하려는 이미지의 이름입니다.