# Home


# GPU服务器使用说明

## 获取服务器信息

{% embed url="<https://nvidia-smi.github.io/>" %}

![服务器信息示例](/files/-LimiPijcRMZ1HjfF-cb)

**使用虚拟容器的服务器：**

* **Dione**
* **Mimas**
* **Tethys**

**其他机器共享宿主操作系统，仅需要查看新建用户这一步，无需查看剩余的说明文档。**

## 新建用户

使用账户addu登陆host，按提示键入用户名及密码。

```bash
ssh addu@172.26.xxx.xxx
# 密码
addu@172.26.xxx.xxx's password:
=====Welcome!
We need to get sudo permission first. Enter the password for `addu`.
# 输入addu的密码，获取sudo权限
[sudo] password for addu:
=====Let's setup a new account and create a container now.
# 输入用户名，接下来自动创建用户并新建虚拟机
Enter your username: test
Creating user...
Allocating container for test...
Creating test
Allocating ssh port... 10020
Device sshproxy added to test
# 设置用户密码
set password for test now (host only).
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Login this host via `ssh <username>@<host-ip>` to manage your container.
Done!
```

{% hint style="info" %}

* 新建的用户名请使用自己的**姓名全拼**，如果需要多个账户，请使用<全拼>+<数字>的格式，如`zhangsan2；`
* **妥善保存：新建的用户名，密码，所在服务器。**
  {% endhint %}

## 管理容器

使用新建的账户登陆host，按照提示管理自己的container。

```bash
# 使用新建的用户登陆并管理虚拟机
ssh test@172.26.xxx.xxx
test@172.26.xxx.xxx's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-54-generic x86_64)
……
 Hi, test
 You're using the GPU Server in Vision Group.

==========About your container:
Your container is not running.
Transfer data to your container using scp or sftp;
File sharing is encouraged, access datasets at shared/datasets, access download files at shared/downloads, etc

See GPU load: nvidia-smi.
    memory usage: free -h.
    disk usage: df -h.

===== main menu  =====
[1] start your container  # 开机
[2] enter your container  # 切换至虚拟机
[3] stop your container   # 关机（也可以直接在虚拟机中执行shutdown now）
[4] change your password  # 更改密码（如果需要改虚拟机密码，进入虚拟机后执行passwd）
[5] allocate ports        # 进行端口映射
[6] release ports         # 释放申请的端口
[0] show info             # 显示虚拟机运行状态
[x] exit                  # 退出管理
# 启动虚拟机
Enter your choice: 1
========== Starting your container...

Press any key to continue...
```

## 使用容器

使用上一步获取的用户名和密码，登入到自己的container。

```bash
# 检查显卡驱动和运行状况
(base) root@test:~# nvidia-smi
Mon Jul  1 14:07:26 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48                 Driver Version: 410.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:19:00.0 Off |                  N/A |
| 30%   41C    P0    67W / 250W |      0MiB / 10989MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce RTX 208...  Off  | 00000000:1A:00.0 Off |                  N/A |
| 30%   51C    P0    61W / 250W |      0MiB / 10989MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce RTX 208...  Off  | 00000000:67:00.0 Off |                  N/A |
| 31%   51C    P0    64W / 250W |      0MiB / 10989MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  GeForce RTX 208...  Off  | 00000000:68:00.0 Off |                  N/A |
| 30%   51C    P0     1W / 250W |      0MiB / 10986MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

## 小结

#### **关于用户权限：**

1. 用户拥有整台机器全部计算资源使用权限，包括全部的CPU、GPU、内存；
2. 用户拥有完整的虚拟机访问权限，默认使用root账户。

#### **关于文件共享：**

1. 为鼓励文件共享，**只有共享目录shared下的文件存放在SSD上**；
2. 共享文件请存放至合适的位置，如数据集存放到datasets；
3. 不要删除别人共享的文件。

#### **关于环境配置：**

1. **请勿在虚拟机内安装显卡驱动，如需重新安装CUDA，请在安装过程中禁止显卡驱动安装；**
2. 已经配置conda及常用深度学习环境；
3. **如果需要安装CUDA，优先使用conda安装；**
4. **如需容器迁移联系管理员。**

共同维护我们的丹炉，祝炼丹愉快！


# 环境配置（重要）

{% hint style="info" %}
**重要提醒：**

1. **请勿在虚拟机内安装显卡驱动，如需重新安装CUDA，请在安装过程中禁止显卡驱动安装；**
2. 已经配置conda及常用深度学习环境；
3. **如果需要安装CUDA，优先使用conda安装；**
4. **如需容器迁移联系管理员。**
   {% endhint %}

### **版本兼容性**

**Linux内核 -> NVIDIA驱动 -> CUDA -> PyTorch**

以上是版本依赖链，你可以更改CUDA和CUDA之上的软件版本，其他版本更新请联系管理员。

例如，NVIDIA驱动版本为410（可以通过nvidia-smi查看），最高支持的CUDA版本是10.0，那么9.0、8.0、7.0的版本也会被向后兼容，但更新的10.2、11.0等版本就无法支持了，无论是通过conda还是apt安装。

对于PyTorch等更上层的包，官方最新版本的安装命令可能是如下的，指定了cudatoolkit版本10.1

```
conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.1 -c pytorch
```

但实际上也可以兼容CUDA10.0。当我们的驱动版本最高支持到CUDA10的时候，可以更改命令为

```
conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.0 -c pytorch
```

**再次强调，不要在容器内安装驱动程序，否则兼容问题将导致驱动失效。**


# 文件传输说明

## **SFTP文件传输**

#### **本文档针对机房托管的使用了虚拟化容器的服务器。**

1. 使用个人账户和密码通过SSH登入服务器终端，启动虚拟容器，进入虚拟容器，此时默认路径是**容器内**`/root`，这就是个人的工作目录。
2. 使用个人账户和密码以及SFTP软件登入服务器。默认进入**宿主机的**home目录`/home/<用户名>`，如果不是，先切到这个目录。
3. 将文件上传至 `/home/<用户名>/root-in-container`

{% hint style="warning" %}
**特别注意：**

SFTP文件传输是与宿主机交互的。容器和宿主机的文件系统之&#x95F4;***打了个洞***&#x7528;来传输文件。宿主机的`/home/<用户名>/root-in-container`对应容器中的`/root。`
{% endhint %}

##


# 用户权限说明

虚拟容器内能够获得完整的用户权限，访问全部的硬件资源。虚拟容器内的root，在宿主机上对应个人用户的ID。

例如，zhangsan在SFTP上传的文件，在宿主机内的所有者为zhangsan，在容器内的所有者为root。

{% hint style="info" %}
如果遇到权限问题，如在容器内的文件无法在SFTP中访问，先确认文件所有者，然后在容器内执行chown -R root:root <文件或目录>
{% endhint %}


# 网络隧道说明

## 网络隧道配置

使用SSH建立隧道作为代理比较复杂，为了简化操作，这里共享使用一个已经建立好的隧道连接。

登陆到服务器后，选择20进入容器，输入一个代理端口号（共享隧道端口号为1080）。

![在容器中使用隧道代理](/files/-Lyh4XbDeaqnIjtc408W)

容器中默认已经安装了proxychains，如果没有安装，运行下面命令安装：

```bash
cd /root/shared/downloads/ # *.deb存放在shared/downloads目录，如果找不到可以自己在本地下载后用sftp传到服务器安装
dpkg -i libproxychains4_4.14-1_amd64.deb proxychains4_4.14-1_amd64.deb
```

编辑配置文件vim /etc/proxychains4.conf，最后一行改为如下(其中1080为共享的隧道端口，自建隧道需修改)：

```bash
socks5  127.0.0.1 1080
```

测试和使用代理：

```bash
# 测试
proxychains curl ip.sb
# 使用
proxychains bash
```

{% hint style="info" %}
共享的端口为1080的隧道代理走的是管理员个人流量，注意避免大流量下载。
{% endhint %}

{% hint style="info" %}
为了给容器提供网络，需要先在本地和宿主机间建立隧道，再在宿主机和容器间建立隧道。

* Linux和macOS下建立本地和服务器间的隧道：ssh -D 10888 localhost -t ssh -R 10800:localhost:10888 \<user>@\<ip> -p \<port>
* Windows下本地和服务器间的隧道建立可以参考Fancy录制的视频：<http://datasci.tju.edu.cn/s/demo_windows.mp4>
* 自建隧道不要再用1080-1090之间的端口，可以使用高位端口如40001
  {% endhint %}


