방금 Kaggle을 좀 알아봤는데, 일주일에 30h의 무료 GPU 연산 자원을 제공하더라고요. 다만 Jupyter Notebook을 통해 서비스가 제공되고, 저는 Notebook에서 Python 환경을 사용하는 방식이 익숙하지 않습니다. 단일 파일 코드로 아이디어를 빠르게 구현하기에는 적합한 도구라는 생각이 들고, 계층이 많은 엔지니어링 코드를 다루기에는 코드가 나뉜 듯한 느낌이 들어서, SSH로 접속해 볼 수 있는지 한 번 시도해 보기로 했습니다.
가능한 방법
ngrok을 사용해 Kaggle의 SSH 서버를 외부에 노출합니다. 아래는 Notebook 셀에 들어갈 코드입니다.
Python
# 1. 安装并配置ngrok
!pip install pyngrok
from pyngrok import ngrok
# 设置ngrok认证token
ngrok.set_auth_token("your_auth_token")
# 2. 启动SSH服务
!DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-server
!mkdir -p /var/run/sshd
# 配置SSH服务,允许root登录并启用密码认证
!echo "root:your_password" | chpasswd
!echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
!echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
!service ssh start
# 3. 使用ngrok暴露SSH端口
ssh_tunnel = ngrok.connect(22, "tcp")
print("SSH Tunnel:", ssh_tunnel.public_url)
# 4. 输出本地SSH连接命令
ssh_host, ssh_port = ssh_tunnel.public_url.replace("tcp://", "").split(":")
print(f"Use the following command to connect via SSH:\nssh root@{ssh_host} -p {ssh_port}")
제한 사항
실행해 보니 ngrok은 TCP 포트를 사용하려면 신용카드나 직불카드를 연결해야 했습니다. 하지만 중국 본토의 카드는 검증을 통과하지 못하는 것 같습니다.
HTTP 프록시 방식으로 서비스 노출하기
Kaggle의 HTTP 서비스를 터널링해 외부로 노출합니다.
Python
%cd ../../
%cd kaggle
%ls
%cp -r input/testfilebox /my
%cd /my
%cd fcb-fronted
!npm install
!npm run build
%cd ../
%pip install -r requirements.txt
# 设置ngrok认证token
ngrok.set_auth_token("your token")
# 2. 使用ngrok暴露FastAPI服务的HTTP端口
http_tunnel = ngrok.connect(12345, "http")
print("Public URL:", http_tunnel.public_url)
!python main.py