Skip to main content

使用VSCode快速开始(推荐)

AladdinEdu中我的实验室使用主要分为三步,workshop创建 > 环境配置 > GPU调用,以下内容将围绕此流程展开。

插件初始化

本节预计完成时间:2min

插件安装

  1. 在VSCode扩展中搜索AladdinEdu,点击安装(若在Cursor中使用,需在AladdinEdu官网下载AladdinEdu插件安装包,并将安装包拖至Cursor扩展区内手动安装):

    install1

  2. 安装完成后可在活动栏看到AladdinEdu插件图标,安装成功:

    install2

也可在登录AladdinEdu后,在「我的实验室」页面,点击“下载AladdinEdu插件”进行下载,将安装包拖拽至扩展区即可安装成功。

账号登录

  1. 点击AladdinEdu插件图标,选择登录,弹窗后选择“打开”外部网站(AladdinEdu平台):

mac用户请注意,不要使用Safari浏览器打开链接,请使用其他浏览器

login1

  1. 在AladdinEdu平台中使用手机号或账号密码登录,首次使用者请先注册:

    login2

  2. 登录成功后点击“点击返回VSCode”,等待返回VSCode(如未自动跳转,请手动返回VSCode)。此时VSCode中出现弹窗,选择“打开”此URL,提示登录成功:

    login3

    login4

workshop创建

本节预计完成时间:3.5min

workshop为AladdinEdu插件的远程工作台,可在本地VSCode中连接远程服务器进行开发与调试。

Stop workshop时,workshop中 /root下的数据将全部保存,但不包括额外安装的python包,因此重新Open后无需再次上传数据,但需重新安装python包,强烈建议安装python包后保存自定义镜像

  • 创建方式:
    • 在IDE中创建:打开本地IDE(如VSCode),通过 AladdinEdu 插件直接创建。
    • 在平台中创建:登录AladdinEdu平台后,在「我的实验室」页面操作。

无论选择上述哪种方式创建 workshop,需要注意,当前仅支持在AladdinEdu插件内完成后续任务

在IDE中创建

  1. 在实验室菜单栏中点击 +,新建工作台:

    workshop1

  2. 填写工作台名称,选择基础镜像与CPU(免费版会员推荐选择“CPU:2 MEM:8G”):

    workshop2

  • workshop启动参数介绍
参数名称说明备注
镜像当前workshop使用的容器镜像通常包含预装软件和基础运行环境
CPU当前workshop启动时分配到的CPU和内存资源这些资源与GPU运行时是共享的,
GPU资源详情请查看GPU调用
ENV当前workshop运行时的环境变量可用于配置应用参数、API密钥等敏感信息
  1. 点击提交后会出现插件的状态提示,配置预计在2min左右完成,提示由“workshop “Test”创建成功”变为“正在创建workshop...:等待workshop启动完成...”

    workshop3

  2. 此时会弹出一个新窗口(后文统称为远端页面),workshop创建完成:

    workshop4

在平台中创建

  1. 在「我的实验室」页面,可以点击“创建新工作台”以新建workshop:

    workshop5

  2. 与在插件中创建类似,依次填写workshop名称、选择workshop环境,然后点击“下一步”:

    workshop6

  3. 选择资源(免费版会员推荐选择“CPU:2核8G”),点击“创建并启动”,创建成功:

    workshop7

  4. 创建成功,显示为启动中状态,刷新网页,显示为运行中状态:

    workshop8

  5. 此时打开插件,可以看到平台中创建的workshop:

    workshop9

  6. 在插件中点击“打开远端”,此时会弹出一个新窗口(后文统称为远端页面),当AladdinEdu图标在远端页面出现,说明workshop启动成功:

    workshop10

    注意:在平台中完成workshop创建后,在插件中点击“启动”后,还需要点击“安装远端插件”方可使用。

    workshop11

运行Demo

本节预计完成时间:约1min 以下操作均在远端页面中进行。

使用镜像运行Demo

在AladdinEdu平台使用镜像时,操作流程详见下图:

pic1

a. 在workshop安装的python包、apt等应用,需要保存镜像后才能被GPU session使用; b.强烈推荐将所有文件存储在/root目录下,这部分文件会【原封不动】同步至session中,同样的,没有保存在/root下的文件则会在workshop停止后删除

  1. 在/root路径下,新建test.py文件,将测试代码复制到文件中,保存文件:

    conda6

import torch
import time

def test_cuda_availability():
print("\n======= CUDA 测试 =======")
# 检查 CUDA 是否可用
cuda_available = torch.cuda.is_available()
print(f"PyTorch CUDA 可用: {'✅是' if cuda_available else '❌否'}")

if cuda_available:
# 打印 CUDA 版本和设备信息
print(f"PyTorch CUDA 版本: {torch.version.cuda}")
print(f"当前 GPU 设备: {torch.cuda.get_device_name(0)}")
print(f"GPU 数量: {torch.cuda.device_count()}")
else:
print("⚠️ 请检查 CUDA 和 PyTorch 是否安装正确!")
print("========================\n")

def test_gpu_speed():
print("\n======= GPU 速度测试 =======")
# 创建一个大型张量
x = torch.randn(10000, 10000)

# CPU 计算
start_time = time.time()
x_cpu = x * x
cpu_time = time.time() - start_time
print(f"CPU 计算时间: {cpu_time:.4f} 秒")

if torch.cuda.is_available():
# 移动到 GPU 计算
x_gpu = x.to('cuda')
start_time = time.time()
x_gpu = x_gpu * x_gpu
torch.cuda.synchronize() # 确保 GPU 计算完成
gpu_time = time.time() - start_time
print(f"GPU 计算时间: {gpu_time:.4f} 秒")
print(f"GPU 比 CPU 快: {cpu_time / gpu_time:.1f} 倍")
else:
print("⚠️ GPU 不可用,跳过测试")
print("==========================\n")

def test_training():
print("\n======= 简单训练测试 =======")
# 定义一个极简神经网络
model = torch.nn.Sequential(
torch.nn.Linear(10, 100),
torch.nn.ReLU(),
torch.nn.Linear(100, 1)
)

# 如果有 GPU,将模型和数据移到 GPU
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = model.to(device)
print(f"使用设备: {device.upper()}")

# 模拟数据
X = torch.randn(1000, 10).to(device)
y = torch.randn(1000, 1).to(device)

# 训练循环
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
start_time = time.time()
for epoch in range(5):
optimizer.zero_grad()
output = model(X)
loss = torch.nn.functional.mse_loss(output, y)
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}, Loss: {loss.item():.4f}")

total_time = time.time() - start_time
print(f"总训练时间: {total_time:.2f} 秒")
print("==========================\n")

if __name__ == "__main__":
test_cuda_availability()
test_gpu_speed()
test_training()
  1. 选择代码首行的“运行”按钮。在创建会话中,镜像需选择为aladdin/pytorch,资源类型为GPU,其余无需修改。点击“提交”: conda6

    conda6

    若选择保存当前任务的参数设置,下次可在启动任务时再次使用该配置。 conda6

输出内容案例:

======= CUDA 测试 =======
PyTorch CUDA 可用: ✅是
PyTorch CUDA 版本: 12.1
当前 GPU 设备: NVIDIA H100 80GB HBM3
GPU 数量: 1
=========================

======= GPU 速度测试 ======
CPU 计算时间: 0.0116 秒
GPU 计算时间: 0.0070 秒
GPU 比 CPU 快: 1.6 倍
==========================

======= 简单训练测试 =======
使用设备: CUDA
Epoch 1, Loss: 1.0493
Epoch 2, Loss: 1.0266
Epoch 3, Loss: 1.0107
Epoch 4, Loss: 0.9994
Epoch 5, Loss: 0.9914
总训练时间: 0.09 秒
===========================

  1. 或使用“快速运行”启动GPU会话:

3.1 添加快速启动所需的GPU配置文件,依次点击“运行和调试”、“创建一个 launch.json 文件”、“Aladdin 远程 Python 调试(附加)”:

77-0

3.2 在launch.json文件中,选择“Aladdin 远程:Python 文件”选项,按照以下模板新增配置。


"resource": {
"cpu": "",
"memory": "",
"gpu": {
"count": 1,
"name": "nvidia.com/gpu-l40s"
},
"ephemeralStorage": "32Gi"
},
"setupCommand": ""

77-1 3.3 修改完成后,保存文件:

77-2

3.4 在test.py文件,选择“快速运行”即可完成上述GPU调用。

77-3

使用Conda环境运行Demo

注:强烈推荐按照本文说明,使用miniconda做环境配置。

  1. workshop启动成功后,进入远端页面,新建终端,在终端中安装miniconda,并确认安装在/root目录下:

    conda2

  • Conda配置方法
# 下载最新版 Miniconda (Linux 64位)
curl -L -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh

conda3

# 按 ENTER 确认默认安装路径 /root/miniconda3
# Note: You can undo this later by running `conda init --reverse $SHELL`

# 此项必须选择yes,安装完成后重启终端conda命令才能生效~

conda3

#关闭当前终端,重新启动一个新的终端
# 验证安装
conda --version
# 应该显示类似:conda 25.11.1

# 添加清华 conda 源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# 显示通道URL
conda config --set show_channel_urls yes
# 设置 pip 使用清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  1. 成功安装miniconda后,需配置python解释器——新建一个python文件,点击远端页面右下角的python版本号,切换到conda环境中的python:

或使用Ctrl+Shift+P快捷键打开命令窗口,输入"Select Interpreter",更换python解释器。

重要 ❗:如不切换,调用GPU时将无法复用配置的环境,出现找不到已安装包的报错!

conda5

  1. 远端页面右下角的版本号出现conda环境名,环境切换成功:

    conda4

  2. 接着安装torch,推荐安装12.4版以适配GPU:

配置科学上网后将显著提升下载安装速度,具体步骤参考学术资源加速

#安装cuda 12.4
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

conda7

  1. 使用下面代码测试cuda是否安装成功,以及是否与当前环境GPU兼容:
import torch
import time

def test_cuda_availability():
print("\n======= CUDA 测试 =======")
# 检查 CUDA 是否可用
cuda_available = torch.cuda.is_available()
print(f"PyTorch CUDA 可用: {'✅是' if cuda_available else '❌否'}")

if cuda_available:
# 打印 CUDA 版本和设备信息
print(f"PyTorch CUDA 版本: {torch.version.cuda}")
print(f"当前 GPU 设备: {torch.cuda.get_device_name(0)}")
print(f"GPU 数量: {torch.cuda.device_count()}")
else:
print("⚠️ 请检查 CUDA 和 PyTorch 是否安装正确!")
print("========================\n")

def test_gpu_speed():
print("\n======= GPU 速度测试 =======")
# 创建一个大型张量
x = torch.randn(10000, 10000)

# CPU 计算
start_time = time.time()
x_cpu = x * x
cpu_time = time.time() - start_time
print(f"CPU 计算时间: {cpu_time:.4f} 秒")

if torch.cuda.is_available():
# 移动到 GPU 计算
x_gpu = x.to('cuda')
start_time = time.time()
x_gpu = x_gpu * x_gpu
torch.cuda.synchronize() # 确保 GPU 计算完成
gpu_time = time.time() - start_time
print(f"GPU 计算时间: {gpu_time:.4f} 秒")
print(f"GPU 比 CPU 快: {cpu_time / gpu_time:.1f} 倍")
else:
print("⚠️ GPU 不可用,跳过测试")
print("==========================\n")

def test_training():
print("\n======= 简单训练测试 =======")
# 定义一个极简神经网络
model = torch.nn.Sequential(
torch.nn.Linear(10, 100),
torch.nn.ReLU(),
torch.nn.Linear(100, 1)
)

# 如果有 GPU,将模型和数据移到 GPU
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = model.to(device)
print(f"使用设备: {device.upper()}")

# 模拟数据
X = torch.randn(1000, 10).to(device)
y = torch.randn(1000, 1).to(device)

# 训练循环
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
start_time = time.time()
for epoch in range(5):
optimizer.zero_grad()
output = model(X)
loss = torch.nn.functional.mse_loss(output, y)
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}, Loss: {loss.item():.4f}")

total_time = time.time() - start_time
print(f"总训练时间: {total_time:.2f} 秒")
print("==========================\n")

if __name__ == "__main__":
test_cuda_availability()
test_gpu_speed()
test_training()