과학용 컴퓨터 사용자가 독점적으로 사전 주문할 수 있는 도구가 있습니까?

과학용 컴퓨터 사용자가 독점적으로 사전 주문할 수 있는 도구가 있습니까?

우리 연구 부서에는 CPU와 GPU를 사용하여 무거운 작업을 수행하는 강력한 우분투 시스템이 있습니다. 우리 연구원들은 모두 SSH를 통해 기계에 연결하고 시스템에서 (기계 학습) 워크로드를 실행합니다.

문제는 시스템을 사용하는 사람들과 동시에 충돌이 발생하고 있으며 사람들이 딥스를 호출할 수 있는 간단한 채팅 상자로는 충분하지 않다는 것입니다. 기본적으로 연구원 A가 시간에 민감한 벤치마킹을 위해 GPU를 사용하려는 경우 타당성을 유지하기 위해 다른 사람이 GPU를 건드리는 것을 원하지 않습니다.

사용자에게 특정 명령이나 장치에 대한 독점 액세스를 예약하고 부여할 수 있는 도구가 있는지 궁금합니다. 모든 작업은 사용자 지정 그룹을 통해 액세스할 수 있는 중앙 집중식 Conda(Python) 설치를 통해 실행됩니다. 모두가 시스템에 SSH로 접속합니다. SSH 액세스를 차단하거나 GPU를 독점으로 설정하거나 Python 액세스를 차단할 수 있나요?

편집: 우리 연구 그룹에 활성 사용자 기반이 있지만 대기열 시스템으로 설정을 복잡하게 만들고 싶지 않다는 점을 앞서 지적해야 합니다. 우리의 설정에 덜 방해가 되는(더 순진한) 변경을 하는 것이 우리의 첫 번째 선택이 될 것입니다. 이 문제를 더 일찍 언급하지 못해 죄송합니다.

답변1

이러한 일을 처리하는 일반적인 방법은 대기열 시스템을 사용하고 사용자가 대기열을 통해서만 작업을 제출하도록 허용하는 것입니다. 제가 일했던 연구소에서 흔히 볼 수 있는 것은토크:

TORQUE는 배치 작업 및 분산 컴퓨팅 노드에 대한 제어를 제공하는 리소스 관리자입니다. 기본적으로 이 소프트웨어를 사용하여 가정이나 소규모 사무실 Linux 클러스터 및 대기열 작업을 설정할 수 있습니다. 클러스터는 헤드 노드와 여러 컴퓨팅 노드로 구성됩니다. 헤드 노드는 Torque 서버 데몬을 실행하고 컴퓨팅 노드는 Torque 클라이언트 데몬을 실행합니다. 헤드 노드는 스케줄러 데몬도 실행합니다.

다른 여러 가지가 있습니다. 모든 사람이 기계를 효율적으로 사용할 수 있도록 적절한 대기열 시스템을 설정하는 방법에 대해 시스템 관리자에게 문의하십시오. 이는 공유 클러스터에 액세스하기 위한 표준 설정입니다.

https://help.ubuntu.com/community/TorquePbsHowto

답변2

이에 대한 내 생각:

  • 동시 SSH 액세스를 비활성화하는 것은 옳지 않은 것 같습니다. 내 경험에 따르면 사람들은 SSH 연결을 열고 응용 프로그램을 실행하지 않고 실행하는 것을 좋아합니다. 반복해서 로그인하는 것은 많은 사람들에게 불편을 줄 수 있습니다.
  • 동시 Python 액세스를 비활성화하는 것은 옳지 않은 것 같습니다. CPU/GPU 리소스에 액세스하지 않고 작업을 실행 중일 수 있습니다.

내가 처리하는 방법은 다음과 같습니다.

  • CPU/GPU 부하를 모니터링할 수 있는 방법이 있어야 합니다.
  • 매초마다 이러한 값을 확인하는 작업(루트에서 실행)을 만들고 그 값이 충분히 높으면 기본적으로 수행합니다 chmod 600/700 files_required_to_access_CPU_GPU. 부하가 낮거나 0이 되면 chmod 644/755 the_same_files.

나는 당신을 위해 이 프로그램을 작성할 수 있지만 시스템에 대한 접근이 필요합니다. 특별히 복잡한 것은 보이지 않습니다.

답변3

/etc/nologin 파일을 생성하여 새로운 로그인(루트 제외)을 방지할 수 있습니다. 이를 위해서는 루트 권한이 필요합니다. 하지만 사용자가 시스템 사용을 마친 후에는 항상 이 파일을 삭제하도록 주의해야 합니다. 이는 파일을 생성하고 일부 신호 또는 종료를 기다린 다음 파일을 삭제하는 일부 권한 있는 프로세스가 있어야 함을 의미합니다. sudo를 사용하는 것은 프로세스가 별도의 권한 있는 컨텍스트에서 실행되고 권한 없는 신호를 프로세스에 보낼 수 없기 때문에 약간 복잡합니다. 그러나 파이프를 통해 사용자에서 권한 있는 프로세스로 통신할 수 있습니다.

Bash 쉘 스크립트를 고려해보세요: _mkexclude

#!/bin/bash
MSG="$1 has exclusive access"
XFILE="/etc/nologin"

[ -e "$XFILE" ] &&  echo "Exclusivity already established, FAIL" >&2  && exit 3
# make exclusive
echo ${MSG} > $XFILE

trap '/bin/rm -rf $XFILE; exit' USR1 QUIT HUP EXIT TERM
# wait to read any line before continuing from stdin cleanup
read f

# make non-exclusive
/bin/rm -rf $XFILE

해당 사용자에 대해 NOPASSWD 명령을 사용하여 /etc/sudoers.d에서 스크립트를 구성해야 합니다. (또는 그룹). 이 스크립트는 nologin 파일이 이미 존재하는지 확인합니다. 그렇지 않은 경우 새 항목이 생성됩니다. 그런 다음 읽기 또는 신호를 기다립니다. 원래(bash) 쉘이 종료되면,clusive도 종료됩니다.

이 스크립트를 호출하는 좋은 방법은 bash 쉘 함수를 사용하는 것입니다.

exclude() { coproc EXCLUDE (sudo _mkexclusive $(id -un) ); }
disexclude() { echo FOO >&${EXCLUDE[1]} ; }

[~/.bashrc의 사용자에게 제공]

스크립트를 sudo하도록 허용된 모든 사용자는 $just 함수를 실행하여 추가 로그인을 방지할 수 있습니다. 이러한 사용자는 **disexclude**동일한 셸 실행 컨텍스트 내에서만 다른 사용자가 로그인하도록 다시 허용할 수 있습니다.

만약에사용자가 제외를 생성한 셸을 닫거나 로그아웃하는 경우 coproc은 다른 사람의 로그인을 방지하는 $XFILE을 삭제해야 합니다.

관련 정보