DAMODEL——创建云实例与部署深度学习模型的详细指南

news2024/12/24 8:15:11

使用 DAMODEL 控制台创建云实例与部署深度学习模型的详细指南

本文将逐步介绍如何使用 DAMODEL 控制台创建云实例、配置 SSH 密钥、上传与下载数据集、以及基于 UNet 网络进行眼底血管分割的完整流程。此指南适用于需要在云端进行深度学习训练的用户,提供详细的操作步骤及代码示例,帮助你快速上手 DAMODEL 平台。


1. 云实例:配置选型与启动

1.1 注册与登录

首先,进入 DAMODEL 的官方网站并进行注册。完成注册后,使用你的账号登录控制台。

  1. 打开 DAMODEL 控制台,找到“GPU 云实例”部分。
    image-20240924134750660
  2. 点击创建实例,按需选择 GPU 资源,如 NVIDIA RTX 4090。
  3. 在镜像配置中选择深度学习框架(例如 PyTorch)的预配置镜像,这样可以省去手动安装依赖的麻烦。
  4. image-20240924140322235

1.2 配置 SSH 密钥对

为了方便后续的远程登录,使用 SSH 密钥验证而非密码登录。

  1. 进入本地终端,使用以下命令创建本地公钥和私钥:

    cd ~/.ssh
    ssh-keygen -o
    

    你可以选择将文件命名为 id_dsa,或使用其他名称。

    image-20240924140027595

  2. .ssh 目录中你会看到两个文件:id_dsa(私钥)和 id_dsa.pub(公钥)。

  3. 进入 DAMODEL 控制台的密钥对配置页面,选择创建密钥对。将 id_dsa.pub 文件中的公钥内容复制到 DAMODEL 控制台上。

1.3 创建云实例

进入 GPU 云实例部分,点击“创建实例”。在配置页面选择所需的 GPU 型号、内存、存储空间等资源配置。确保在密钥对选项中选择之前创建的 SSH 密钥对。

  1. GPU 选型:推荐根据模型的计算需求选择高性能 GPU,比如 NVIDIA RTX 系列。
  2. 镜像配置:选择包含 PyTorch 的镜像,避免手动安装深度学习框架。
  3. 密钥:选择先前配置的 SSH 密钥对。

确认配置后,点击“立即创建”,等待实例启动。

1.4 登录云实例

实例创建完成后,你将看到一个访问链接。使用任何支持 SSH 的工具(如终端、VSCode 等)连接到云实例。

使用以下命令登录到实例:

ssh -i ~/.ssh/id_dsa root@<instance_ip>

成功登录后,运行以下命令验证 GPU 和 CUDA 是否可用:

nvidia-smi
python -c "import torch; print(torch.cuda.is_available())"

如果看到 GPU 显示信息和 True,则说明云实例已正确配置。

image-20240924140445165


2. 云存储:数据集上传与下载

DAMODEL 提供文件存储服务,允许你在不同实例之间共享数据。相比本地数据盘,云存储的优势在于:

  • 多实例共享:可以在不同实例中访问相同的数据,便于协作。
  • 数据安全:数据有多副本冗余,可靠性更高。

但是,文件存储的 IO 性能可能不如本地盘。因此建议将训练数据先拷贝到本地数据盘再进行训练,以提高 IO 性能。

2.1 上传数据集

你可以使用 scp 命令将本地的数据集上传到云实例的数据盘中。

scp -rP <port_number> <local_data_path> root@<instance_ip>:/root/workspace

示例:

scp -rP 35740 ./DRIVE-SEG-DATA root@cn-north-b.ssh.damodel.com:/root/workspace

这里:

  • 35740 是 SSH 端口号。
  • ./DRIVE-SEG-DATA 是本地数据集路径。
  • /root/workspace 是远程实例中的目标路径。

2.2 下载数据集

数据下载的命令与上传类似:

scp -rP <port_number> root@<instance_ip>:/root/workspace ./local_data_path

示例:

scp -rP 35740 root@cn-north-b.ssh.damodel.com:/root/workspace ./DRIVE-SEG-DATA

3. 云开发:眼底血管分割案例

3.1 案例背景

眼底图像分割是医学影像分析中的一个重要任务,特别是在检测视网膜血管时。UNet 网络结构因其强大的分割能力而被广泛应用于医学图像分割任务中。本文通过 DAMODEL 部署深度学习模型,演示如何使用 UNet 网络进行眼底血管分割。

3.2 网络结构

我们将使用 PyTorch 框架搭建 UNet 网络,以下是网络结构的代码:

class UNet(nn.Module):
    def __init__(self, n_channels, n_classes, bilinear=True):
        super(UNet, self).__init__()
        self.n_channels = n_channels
        self.n_classes = n_classes
        self.bilinear = bilinear

        self.inc = DoubleConv(n_channels, 64)
        self.down1 = Down(64, 128)
        self.down2 = Down(128, 256)
        self.down3 = Down(256, 512)
        self.down4 = Down(512, 512)
        self.up1 = Up(1024, 256, bilinear)
        self.up2 = Up(512, 128, bilinear)
        self.up3 = Up(256, 64, bilinear)
        self.up4 = Up(128, 64, bilinear)
        self.outc = OutConv(64, n_classes)

    def forward(self, x):
        x1 = self.inc(x)
        x2 = self.down1(x1)
        x3 = self.down2(x2)
        x4 = self.down3(x3)
        x5 = self.down4(x4)
        x = self.up1(x5, x4)
        x = self.up2(x, x3)
        x = self.up3(x, x2)
        x = self.up4(x, x1)
        logits = self.outc(x)
        return logits

3.3 网络训练

以下是基于 PyTorch 框架的训练代码。它将加载数据集、训练 UNet 模型,并保存最佳模型。

def train_net(net, device, data_path, epochs=40, batch_size=1, lr=0.00001):
    dataset = DatasetLoader(data_path)
    train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)
    optimizer = optim.Adam(net.parameters(), lr=lr)
    criterion = nn.BCEWithLogitsLoss()
    best_loss = float('inf')

    for epoch in range(epochs):
        net.train()
        epoch_loss = 0
        for image, label in train_loader:
            optimizer.zero_grad()
            image = image.to(device)
            label = label.to(device)
            pred = net(image)
            loss = criterion(pred, label)
            loss.backward()
            optimizer.step()
            epoch_loss += loss.item()

        print(f"Epoch {epoch+1}, Loss: {epoch_loss}")
        if epoch_loss < best_loss:
            best_loss = epoch_loss
            torch.save(net.state_dict(), 'best_model.pth')

    print("Training complete. Best loss:", best_loss)

你可以在训练结束后,通过以下方式可视化损失曲线:

import matplotlib.pyplot as plt
plt.plot(loss_record)
plt.title('Training Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.savefig('/root/shared-storage/results/training_loss.png')

3.4 模型测试

在测试阶段,主要使用 IoU(交并比)指标来评估模型性能。

def cal_miou(test_dir, pred_dir, gt_dir, model_path):
    # Load model and prepare for testing
    net = UNet(n_channels=1, n_classes=1)
    net.load_state_dict(torch.load(model_path))
    net.eval()

    for image_id in os.listdir(test_dir):
        img = cv2.imread(os.path.join(test_dir, image_id), cv2.IMREAD_GRAYSCALE)
        pred = net(torch.from_numpy(img).unsqueeze(0).float())
        # Post-process and save results

测试结果将输出 IoU 计算值,帮助你判断模型的分割效果。

image-20240924140607328


id), cv2.IMREAD_GRAYSCALE)
pred = net(torch.from_numpy(img).unsqueeze(0).float())
# Post-process and save results


测试结果将输出 IoU 计算值,帮助你判断模型的分割效果。

[外链图片转存中...(img-QwvgExY6-1727158012004)]

---

通过此指南,你可以在 DAMODEL 上完成从实例创建、数据处理到模型训练和测试的整个深度学习开发流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv10改进,YOLOv10主干网络替换为FasterNet(全网独发手把手教学,助力涨点)

摘要 近年来,许多研究致力于减少浮点运算(FLOPs)以加速神经网络。然而,我们观察到这种FLOPs的减少并不一定能带来相应的延迟减少。这主要是由于运算每秒浮点运算数(FLOPS)效率低下,尤其是在频繁的内存访问(如深度卷积)时。为了解决这一问题,提出了一种新的部分卷积(…

如何快速上手一个Github的开源项目

程序研发领域正是有一些热衷开源的小伙伴&#xff0c;技能迭代才能如此的迅速&#xff0c;因此&#xff0c;快速上手一个GitHub上的开源项目&#xff0c;基本上已经变成很个程序员小伙伴必须掌握的技能&#xff0c;因为终究你会应用到其中的一个或多个项目&#xff0c;帮助自己…

<刷题笔记> 二叉搜索树与双向链表注意事项

二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 根据题意&#xff0c;我们需要将搜索二叉树转换成有序的形式。 重点一&#xff1a;BST的中序遍历一定是有序的 因此&#xff0c;此题无论如何都需要使用中序。 又因为要求原地算法&#xff0c;所以&#xff1a; 重点二&a…

Oracle AI理论与实践,企业落地篇干货满满

最近也是看到了圈子里的一位DBA好友&#xff0c;领导安排的工作是让负责AI的落地&#xff0c;而且也作为他业绩考核的指标&#xff0c;作为1名15年的DBA老兵来说&#xff0c;让AI落地面临的困难重重。 AI已经逐渐侵入到实际的生活中&#xff0c;最近我也是参加了Oracle官方在中…

大模型下载、本地部署和调用攻略

零、下载大模型——以Qwen/Qwen2.5-7B为例 1、下载前的准备工作 1.1 仔细阅读模型的Model card介绍 里面会有支持的上下文长度、模型结构、参数量等基本信息 1.2 查看模型文件 Tokenizer相关的文件&#xff1a; merges.txt&#xff1a;这是用于Byte Pair Encoding&#xff…

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净,像刚clone下来一样

git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净&#xff0c;像刚clone下来一样 code review! 文章目录 git笔记之重置本地仓库所有分支和远程保持一致、工作区恢复干净&#xff0c;像刚clone下来一样1.实现该功能的 Bash 脚本示例2.改进版&#xff1a;增加了gi…

【第十八章:Sentosa_DSML社区版-机器学习之协同过滤】

【第十八章&#xff1a;Sentosa_DSML社区版-机器学习之协同过滤】 1.算子介绍 协同过滤是推荐系统中常用的一种方法。该算法旨在填补用户-产品关联矩阵中缺少的项。在算法中&#xff0c;用户和产品都是通过一组少量的潜在因素描述&#xff0c;这些潜在因素可以用于预测用户-产…

彻底掌握Android中的ViewModel

彻底掌握Android中的ViewModel ViewModel 属于Android Jetpack库的一部分&#xff0c;是一种业务逻辑或屏幕状态容器。它提供了在配置更改&#xff08;如屏幕旋转&#xff09;后依旧保留相应状态的特性&#xff0c;帮助开发者以更加清晰和可维护的方式处理UI相关的数据&#x…

MySQL安装文档-Windows

文章目录 MySQL安装1. 安装2. 配置 MySQL安装 1. 安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装 安装MySQL的相关组件&#xff0c;这个过程可能需要耗时几分钟&#xff0c;耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 2. 配置 安装好MySQL之后…

从零开始构建GPT风格的LLM分类器 微调GPT模型进行垃圾邮件分类

在这篇文章中&#xff0c;我想向您展示如何将预训练的大型语言模型&#xff08;LLM&#xff09;转变为强大的文本分类器。 为什么专注于分类&#xff1f; 首先&#xff0c;将预训练模型微调为分类器提供了一种温和而有效的微调入门方式。其次&#xff0c;许多现实世界和商业挑…

SpringBoot技术栈的网上超市开发实践

2 系统开发技术 这部分内容主要介绍本系统使用的技术&#xff0c;包括使用的工具&#xff0c;编程的语言等内容。 2.1 Java语言 Java语言自公元1995年至今&#xff0c;已经超过25年了&#xff0c;依然在软件开发上面有很大的市场占有率。当年Sun公司发明Java就是为了发展一门跨…

python类的call方法与init方法

1. call方法 在对象被调用了的时候就会调用call方法a(666) class A:def __call__(self, args):print(call 方法被调用了,args) aA() a(666) 2.init方法 创建对象的时候 init 方法被调用 class A:def __init__(self,args):print(创建对象的时候 init 方法被调用了,args) aA(…

shardingjdbc-读写分离配置

文章目录 1、application.yml2、shardingsphere.yaml3、创建实体类 User4、创建 UserMapper5、添加依赖6、读写分离测试7、事务测试 我们的主从复制已经提前搭建好&#xff1a; mysql-搭建主从复制&#xff1a;https://blog.csdn.net/m0_65152767/article/details/142214434 1…

使用 Python 模拟光的折射,反射,和全反射

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【一句话点破】【C++重要题目】基类与派生类的成员变量值被对象调用的结果(二)

【一句话点破】基类/派生类的成员变量由哪个对象初始化的&#xff0c;哪个对象调用该成员变量时就用由它初始化的值 [尤其找准是基类对象or派生类对象的值] 【重要例题】15浙工大卷二读程序5题 可运行代码如下 #include "bits/stdc.h" #include<iostream> u…

畅阅读微信小程序

畅阅读微信小程序 weixin051畅阅读微信小程序ssm 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用j…

CVE-2024-1112 Resource Hacker 缓冲区溢出分析

漏洞简述 CVE-2024-1112 是 Resource Hacker 软件的一个缓冲区溢出漏洞。该漏洞存在于版本 3.6.0.92 中。由于软件在处理命令行中的文件路径时未对文件字符串长度进行限制&#xff0c;过长的字符串参数导致内存被过度写入&#xff0c;从而引发缓冲区溢出。 漏洞复现 构造长度…

简单的评论系统【JavaScript】

这段代码实现了一个简单的评论系统&#xff0c;用户可以输入评论并提交&#xff0c;评论会显示在页面上&#xff0c;同时可以通过点击“删除”按钮来删除相应的评论。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head…

Excel名字查重筛选,查找重复内容原来这么简单

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50d; 在处理大量数据时&#xff0c;尤其是人员名单或客户信息时&#xff0c;确保没有重复的名字是非常重要的。在Excel中&#xff0c;有几种方法可以帮助我们快速查找和处理重复的名字。今天&#xff0c;我们将介绍…

2024年9月24日历史上的今天大事件早读

1550年9月24日 明代戏剧家汤显祖出生 1852年9月24日 法国人吉法尔制造的用蒸汽机推进的飞船试飞成功 1884年9月24日 中国近代化学的先驱徐寿逝世 1905年9月24日 吴樾壮炸五大臣&#xff0c;身殉革命 1909年9月24日 京张铁路通车 1910年9月24日 剧作家曹禺诞生 1930年9月2…