如何通过jupyter调用服务器端的GPU资源

1. 需求和解决方法概述

**需求:**在本地在网页上编写、调试python代码,而实际python代码是通过远程服务器编译、运行的。这种模式特别适合做试验,不断测试代码的功能等。

(VScode可以远程访问,但vscode不能像jupyter一样,实时显示、更改代码。)

**方案:**要在本地使用 Jupyter Notebook 编写代码并在远程服务器(具有 GPU)上运行代码,可以通过 SSH 隧道将本地的 Jupyter 环境连接到远程服务器。这种方式允许在本地编写代码,而计算和处理在远程服务器上完成。

分4步(具体方法见2)

  1. 在远程服务器上安装 Jupyter Notebook 并启动它,监听所有 IP 地址。

  2. 使用 SSH 隧道连接本地和远程服务器。

  3. 在本地浏览器中通过 `localhost:8888` 访问 Jupyter Notebook。

  4. 确保你的代码可以利用 GPU 运行,并安装必要的库。

2. 具体方法

2.1 在远程服务器上安装 Jupyter Notebook

复制代码
# 更新软件包列表
sudo apt update

# 安装 pip 和 jupyter
sudo apt install python3-pip
pip3 install jupyter

2.2 在远程服务器上启动 Jupyter Notebook

复制代码
# 启动 Jupyter Notebook,监听所有 IP 地址
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0

启动之后,终端中会显示一个带有 token 的 URL,类似如下所示:

http://0.0.0.0:8888/?token=\<your_token>

记住这个 token,它将在连接时使用。

2.3 在本地通过 SSH 隧道连接到远程服务器

在本地机器上,使用 SSH 隧道连接到远程服务器。假设你的远程服务器地址是 `remote_server_ip`,可以运行以下命令:

bash 复制代码
ssh -L 8888:localhost:8888 your_username@remote_server_ip

这条命令将本地机器的 8888 端口映射到远程服务器的 8888 端口。

命令的具体解释见 3

2.4 在本地浏览器中访问 Jupyter Notebook

成功建立 SSH 隧道后,你可以在本地浏览器中打开以下地址来访问远程服务器上的 Jupyter Notebook:

http://localhost:8888

此时,系统会要求输入启动 Jupyter Notebook 时显示的 token。

2.5 配置远程服务器使用 GPU

为了确保你的代码能够在远程服务器的 GPU 上运行,你需要安装和配置适当的 GPU 驱动程序(如 NVIDIA 驱动)和相关的深度学习库(如 TensorFlow 或 PyTorch)。

例如,如果使用 TensorFlow,你可以安装 GPU 版本:

bash 复制代码
pip install tensorflow-gpu

安装完相关依赖后,通过代码在 Jupyter Notebook 中检测 GPU 是否可用:

bash 复制代码
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

如果安装pytorch,则

import torch

print(torch.cuda.is_available())

3. 解释:SSH 隧道连接到远程服务器

这条命令是使用 `ssh` 命令建立一个本地端口转发(端口隧道)连接,具体解释如下:

bash 复制代码
ssh -L 8888:localhost:8888 your_username@remote_server_ip

- `ssh`: 这是用于通过 SSH(Secure Shell)协议连接到远程服务器的命令。
- `-L 8888:localhost:8888`: 这是本地端口转发选项,具体含义如下:

  • `8888`: 本地计算机的端口号(本地主机上的端口)。

  • `localhost`: 指向远程服务器的主机名。在这个例子中,`localhost` 指的是远程服务器本身,而不是本地机器。
    **- `8888`:**远程服务器上的端口号。该命令表示你将访问远程服务器上的端口 `8888`,并将其转发到你本地的端口 `8888`。

- `your_username@remote_server_ip`: SSH 连接到远程服务器时使用的用户名 @远程服务器的 IP 地址。

整体意思:

这条命令会通过 SSH 将本地机器的 `8888` 端口与远程服务器 `remote_server_ip' 的 `8888` 端口进行连接。任何本地通过 `localhost:8888` 发送的流量会被转发到远程服务器上的 `localhost:8888` 端口(实际上是 `remote_server_ip` 的 8888 端口)。这常用于远程访问一个运行在远程服务器上的服务,例如 Jupyter Notebook、Web 服务器等,通常这些服务绑定在远程服务器的 `localhost` 上。

相关推荐
cooldream200939 分钟前
Python 包管理新时代:深入了解 `uv` 的使用与实践
python·uv·包管理器
之歆40 分钟前
Python-魔术方法-创建、初始化与销毁-hash-bool-可视化-运算符重载-容器和大小-可调用对象-上下文管理-反射-描述器-二分-学习笔记
笔记·python·学习
AI街潜水的八角1 小时前
深度学习图像分类数据集—五种电器识别分类
人工智能·深度学习·分类
胖达不服输1 小时前
「日拱一码」025 机器学习——评价指标
人工智能·python·机器学习·评价指标
默辨1 小时前
机器学习(ML)、深度学习(DL)、强化学习(RL)关系和区别
人工智能·深度学习·机器学习
音程1 小时前
什么是Jaccard 相似度(Jaccard Similarity)
深度学习·数据挖掘
大模型最新论文速读2 小时前
指令微调时,也要考虑提示损失
人工智能·深度学习·语言模型·自然语言处理·llama
大千AI助手2 小时前
BERT:双向Transformer革命 | 重塑自然语言理解的预训练范式
人工智能·深度学习·机器学习·自然语言处理·llm·bert·transformer
brave_zhao2 小时前
JavaBeanUtils javaBean转map, 实体类转map,实体集合转List<Map>
linux·windows·python
apihz3 小时前
通用图片搜索-搜狗源免费API接口使用指南
android·java·python·php·音视频