免费服务器的选择

深度学习模型的训练和部署通常需要强大的计算资源,尤其是GPU加速。对于个人用户或小型项目来说,购买高性能服务器可能成本较高,因此选择免费的服务器资源成为一个不错的选择。以下是我用过的一些免费服务器选项:

1. 启智协作平台

启智协作平台 是一个提供免费GPU、NPU等计算资源的平台。平台支持多种深度学习框架,如TensorFlow和PyTorch。注册后,用户可以获得50个积分的免费额度,用于租用如GPU、NPU等计算资源。

1.1 创建任务

首先先需要创建数据集和项目,然后才能创建云脑任务。创建数据集和项目流程略。

创建数据集示例

任务主要分为四种类型:

  • 调试任务(最多运行4小时)
  • 训练任务(适合长期训练,但不会返回运行时出现的错误)
  • 推理任务
  • 通用任务(需要审批)

下面以训练任务为例介绍如何创建任务:

训练任务

基本信息这边根据个人情况选择即可,建议选择NPU,不仅显存、内存、CPU核数比传统GPU高,并且消耗积分也更少。

镜像的话可以选择一个别人用的镜像(最好带cann),也可以把自己调试任务的环境保存成镜像。启动文件的话选择自己训练主程序入口(路径不要带点,如./examples/myexp_NPU.py,否则运行出错)。

1.2 tricks

  • 每天可以通过创建数据集、创建项目仓库等方式获取积分。
  • 还可以通过每日运行一次任务获得10个积分。
  • 任务终止后只有 work 路径下的文件会被保存,其他路径下的文件还有已经配好的环境都会丢失,建议把结果保存到 work 路径下,并且在主程序里添加pip下载依赖的代码。
1
2
import os
os.system('pip install numpy hickle lightning torch==2.1.0 torchvision xarray fvcore lpips pandas scikit-image timm tqdm einops PyWavelets')
  • 如果检测不到 NPU,可以在终端输入以下命令:
1
source /usr/local/Ascend/ascend-toolkit/set_env.sh
  • GPU 训练的代码可以通过torch_npu框架的代码转换直接在 NPU 上运行,代码转换代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try:
import torch_npu
from torch_npu.contrib import transfer_to_npu

# 1. 修复 get_device_capability 返回 None 的问题
# NPU 不支持这个概念,我们伪造一个返回值 (比如 8.0,代表 Ampere 架构,骗过 Lightning)
if not hasattr(torch.cuda, 'get_device_capability'):
torch.cuda.get_device_capability = lambda device=None: (8, 0)
else:
# 如果已经存在但返回 None (transfer_to_npu 的副作用),则覆盖它
original_get_cap = torch.cuda.get_device_capability
def patched_get_cap(device=None):
cap = original_get_cap(device)
if cap is None:
return (8, 0) # 伪造一个支持 TF32 的架构
return cap
torch.cuda.get_device_capability = patched_get_cap
print("Info: 成功启用 NPU 自动迁移 (transfer_to_npu)。")
# 2. 禁用 Lightning 的 TF32 精度检查 (NPU 不需要这个)
torch.set_float32_matmul_precision('medium')
except ImportError:
print("Info: 未检测到 torch_npu,将使用标准 CPU/GPU 模式。")

2. Kaggle

Kaggle 是一个数据科学竞赛平台,提供免费的GPU资源(NVIDIA Tesla P100)。用户可以创建Notebook并使用这些资源进行深度学习模型的训练和测试。Kaggle 每周提供30小时的GPU使用时间,适合中小型项目,且使用方便。

2.1 创建Notebook

在Kaggle主页,点击右上角的“New Notebook”按钮,选择“Notebook”选项。然后在Notebook界面,点击右侧的“Settings”图标,选择“Accelerator”为GPU。注意需要手机验证后才能使用GPU资源。

2.2 tricks

  • Kaggle的GPU资源是按周计算的,每周六重置30小时的使用时间。
  • 需要预先把数据上传到 input 里面,模型默认保存在 output 路径下
  • 如果在本地已经写好了训练代码,可以先上传到input,通过以下代码拷贝到工作区
1
2
3
4
5
6
7
import shutil

src_dir = '/kaggle/input/openstl-hycom-code'
dst_dir = '/kaggle/working/openstl-hycom-code'

# 如果目标文件夹已存在,需先删除或用 dirs_exist_ok=True(Python 3.8+)
shutil.copytree(src_dir, dst_dir, dirs_exist_ok=True)
  • 通过下面这个魔术命令可以修改在 kaggle路径下的代码内容:
1
2
3
4
%%writefile /kaggle/working/path/to/yourcode/myexp.py

import os
# ..new code..
  • Notebook中代码在docker容器中运行,每次运行前都需要配置环境,配置环境代码如下所示:
1
2
3
# 在训练代码入口添加
import os
os.system('pip install numpy')
  • Notebook运行结束后,可以从 output 路径下下载所需模型文件
  • 默认工作路径 /kaggle/working 限制大小为20G,可以考虑把模型工作路径迁移到 /kaggle/tmp 文件夹下:
1
2
3
# notebook的魔术命令
!mkdir /kaggle/tmp
%cd /kaggle/tmp
  • 可以把模型和训练日志等上传到模型托管平台(如huggingface(可免费存100G)),上传代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class HuggingFaceSyncCallback(Callback):
def __init__(self, repo_id, token, src_dir, log_dir):
super().__init__()
self.repo_id = repo_id
self.token = token
self.src_dir = src_dir
self.log_dir = log_dir
self.api = HfApi(token=token)
self.current_epoch = 0

def on_train_epoch_end(self, trainer, pl_module):
self.current_epoch = trainer.current_epoch
self._upload()

def _upload(self):
try:
# 上传整个 checkpoints 文件夹
self.api.upload_large_folder(
folder_path=self.src_dir,
repo_id=self.repo_id,
repo_type="model",
# path_in_repo="checkpoints", # 在仓库中的路径
# commit_message=f"Upload checkpoints epoch {self.current_epoch}",
num_workers=4, # 并发上传数
print_report=True,
print_report_every=60, # 每60秒打印进度
)

self.api.upload_folder(
folder_path=self.log_dir,
repo_id=self.repo_id,
repo_type="model",
path_in_repo="lightning_logs", # 在仓库中的路径
commit_message=f"Upload logs epoch {self.current_epoch}"
)
print("Successfully uploaded checkpoints to HuggingFace Hub")
except Exception as e:
print(f"Upload failed: {e}")
  • 可以从huggingface下载最新的checkpoint再次训练,代码如下:
1
2
3
4
5
6
7
8
from huggingface_hub import hf_hub_download

# 下载 last.ckpt 到本地
model_path = hf_hub_download(
repo_id="marinerubbish/openstl-hycom-model",
filename="./last.ckpt",
local_dir="." # 下载到哪个文件夹
)
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022-2026 CPY
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信