608 lines
29 KiB
HTML
608 lines
29 KiB
HTML
|
||
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>昇腾异构计算架构-CANN概念分析</title>
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||
<style>
|
||
:root {
|
||
--primary-color: #1a73e8;
|
||
--secondary-color: #34a853;
|
||
--accent-color: #ea4335;
|
||
--light-bg: #f8f9fa;
|
||
--card-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
body {
|
||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
||
color: #333;
|
||
background-color: var(--light-bg);
|
||
}
|
||
|
||
.hero-section {
|
||
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
||
color: white;
|
||
padding: 3rem 0;
|
||
margin-bottom: 2rem;
|
||
}
|
||
|
||
.card {
|
||
border: none;
|
||
border-radius: 12px;
|
||
box-shadow: var(--card-shadow);
|
||
margin-bottom: 2rem;
|
||
transition: transform 0.3s ease;
|
||
}
|
||
|
||
.card:hover {
|
||
transform: translateY(-5px);
|
||
}
|
||
|
||
.card-header {
|
||
background-color: var(--primary-color);
|
||
color: white;
|
||
border-radius: 12px 12px 0 0 !important;
|
||
padding: 1rem 1.5rem;
|
||
}
|
||
|
||
.badge {
|
||
font-size: 0.85em;
|
||
padding: 0.5em 0.8em;
|
||
}
|
||
|
||
.table {
|
||
border-collapse: separate;
|
||
border-spacing: 0;
|
||
}
|
||
|
||
.table th {
|
||
background-color: var(--primary-color);
|
||
color: white;
|
||
border: none;
|
||
padding: 0.75rem;
|
||
}
|
||
|
||
.table td {
|
||
padding: 0.75rem;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.table tr:nth-child(even) {
|
||
background-color: rgba(0, 0, 0, 0.02);
|
||
}
|
||
|
||
.timeline {
|
||
position: relative;
|
||
padding-left: 30px;
|
||
}
|
||
|
||
.timeline::before {
|
||
content: '';
|
||
position: absolute;
|
||
left: 8px;
|
||
top: 0;
|
||
height: 100%;
|
||
width: 2px;
|
||
background: var(--primary-color);
|
||
}
|
||
|
||
.timeline-item {
|
||
position: relative;
|
||
margin-bottom: 1.5rem;
|
||
}
|
||
|
||
.timeline-item::before {
|
||
content: '';
|
||
position: absolute;
|
||
left: -30px;
|
||
top: 5px;
|
||
width: 16px;
|
||
height: 16px;
|
||
border-radius: 50%;
|
||
background: var(--primary-color);
|
||
border: 3px solid white;
|
||
}
|
||
|
||
.highlight-box {
|
||
background-color: rgba(26, 115, 232, 0.1);
|
||
border-left: 4px solid var(--primary-color);
|
||
padding: 1rem;
|
||
margin: 1rem 0;
|
||
border-radius: 0 8px 8px 0;
|
||
}
|
||
|
||
.company-logo {
|
||
width: 40px;
|
||
height: 40px;
|
||
background-color: var(--primary-color);
|
||
color: white;
|
||
border-radius: 50%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-weight: bold;
|
||
margin-right: 10px;
|
||
}
|
||
|
||
.tech-tag {
|
||
display: inline-block;
|
||
background-color: rgba(52, 168, 83, 0.1);
|
||
color: var(--secondary-color);
|
||
padding: 0.25rem 0.5rem;
|
||
border-radius: 4px;
|
||
font-size: 0.85rem;
|
||
margin: 0.25rem;
|
||
}
|
||
|
||
@media (max-width: 768px) {
|
||
.hero-section {
|
||
padding: 2rem 0;
|
||
}
|
||
|
||
.table-responsive {
|
||
border: none;
|
||
}
|
||
|
||
.table {
|
||
font-size: 0.9rem;
|
||
}
|
||
|
||
.table th, .table td {
|
||
padding: 0.5rem;
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<!-- Hero Section -->
|
||
<div class="hero-section">
|
||
<div class="container">
|
||
<div class="row align-items-center">
|
||
<div class="col-lg-8">
|
||
<h1 class="display-5 fw-bold mb-3">昇腾异构计算架构-CANN</h1>
|
||
<p class="lead">华为昇腾AI计算平台的核心软件组件,连接上层AI框架与底层昇腾硬件,实现计算效率的最大化</p>
|
||
<div class="mt-4">
|
||
<span class="badge bg-light text-dark me-2"><i class="bi bi-cpu me-1"></i> 异构计算</span>
|
||
<span class="badge bg-light text-dark me-2"><i class="bi bi-gear me-1"></i> 算子优化</span>
|
||
<span class="badge bg-light text-dark me-2"><i class="bi bi-diagram-3 me-1"></i> 生态协同</span>
|
||
<span class="badge bg-light text-dark"><i class="bi bi-lightning me-1"></i> 高性能计算</span>
|
||
</div>
|
||
</div>
|
||
<div class="col-lg-4 text-center">
|
||
<img src="https://via.placeholder.com/300x200?text=昇腾CANN架构" class="img-fluid rounded" alt="昇腾CANN架构">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="container mb-5">
|
||
<!-- 概念概览 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-info-circle me-2"></i>概念概览</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-md-8">
|
||
<p>昇腾异构计算架构-CANN是华为昇腾AI计算平台的核心软件组件,通过连接上层AI框架与底层昇腾硬件,实现计算效率的最大化。当前CANN生态已覆盖50+主流大模型,算子丰富度与性能接近国际主流水平(如CUDA),成为昇腾生态加速繁荣的关键驱动力。</p>
|
||
<div class="highlight-box">
|
||
<h5>核心观点摘要</h5>
|
||
<p>随着CANN 7.0版本的推广及大模型应用的深化,CANN有望进一步巩固其在国产算力生态中的核心地位,推动国内AI产业从"可用"向"好用"升级。</p>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4">
|
||
<div class="timeline">
|
||
<div class="timeline-item">
|
||
<h6>2018年</h6>
|
||
<p>昇腾计算产业启动,CANN 1.0版本发布</p>
|
||
</div>
|
||
<div class="timeline-item">
|
||
<h6>2020年</h6>
|
||
<p>CANN 3.0版本推出,明确异构计算架构定位</p>
|
||
</div>
|
||
<div class="timeline-item">
|
||
<h6>2024年</h6>
|
||
<p>CANN 7.0版本发布,支持50+主流大模型</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 核心逻辑与市场认知分析 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-lightbulb me-2"></i>核心逻辑与市场认知分析</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-md-6 mb-4">
|
||
<h5><i class="bi bi-rocket text-primary me-2"></i>核心驱动力</h5>
|
||
<ul>
|
||
<li><strong>技术必要性</strong>:昇腾AI芯片的异构计算特性需要CANN作为中间层,实现不同计算单元的协同调度与优化</li>
|
||
<li><strong>生态协同需求</strong>:CANN是连接上层框架与底层硬件的桥梁,是昇腾生态协同的关键纽带</li>
|
||
</ul>
|
||
</div>
|
||
<div class="col-md-6 mb-4">
|
||
<h5><i class="bi bi-fire text-danger me-2"></i>市场热度与情绪</h5>
|
||
<ul>
|
||
<li><strong>技术热度</strong>:CANN 7.0版本引发技术圈广泛讨论,开发者社区活跃度提升</li>
|
||
<li><strong>生态扩张</strong>:与主流大模型、开源框架的深度适配,推动开发者接受度快速提升</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<h5><i class="bi bi-exclamation-triangle text-warning me-2"></i>预期差分析</h5>
|
||
<div class="highlight-box">
|
||
<p>市场普遍认知可能忽略了以下关键点:</p>
|
||
<ul>
|
||
<li><strong>技术落地的难度</strong>:CANN的算子丰富度与性能接近国际主流水平,但实际部署中仍面临算子适配复杂度高、跨设备协同效率待优化等问题</li>
|
||
<li><strong>生态扩张的持续性</strong>:CANN与主流框架的适配是短期催化,但长期生态繁荣需依赖开发者社区的持续贡献</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 关键催化剂与未来发展路径 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-graph-up me-2"></i>关键催化剂与未来发展路径</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-md-6 mb-4">
|
||
<h5><i class="bi bi-calendar3 text-primary me-2"></i>近期催化剂(未来3-6个月)</h5>
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="badge bg-primary rounded-pill p-2 me-3">1</div>
|
||
<div>
|
||
<h6>CANN 7.0版本推广</h6>
|
||
<p>随着昇腾AI服务器的规模化部署,CANN 7.0版本的开发者工具将进一步普及,推动开发者迁移率提升</p>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex align-items-start">
|
||
<div class="badge bg-primary rounded-pill p-2 me-3">2</div>
|
||
<div>
|
||
<h6>大模型厂商适配进展</h6>
|
||
<p>讯飞星火、GPT-3等主流大模型厂商对CANN的支持将直接影响CANN的生态活跃度</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-4">
|
||
<h5><i class="bi bi-compass text-success me-2"></i>长期发展路径(未来3-5年)</h5>
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="badge bg-success rounded-pill p-2 me-3">1</div>
|
||
<div>
|
||
<h6>技术迭代</h6>
|
||
<p>持续优化算子丰富度、计算性能及跨设备协同效率</p>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="badge bg-success rounded-pill p-2 me-3">2</div>
|
||
<div>
|
||
<h6>生态扩张</h6>
|
||
<p>通过开发者社区运营、企业级解决方案等举措,扩大用户基数与应用场景覆盖</p>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex align-items-start">
|
||
<div class="badge bg-success rounded-pill p-2 me-3">3</div>
|
||
<div>
|
||
<h6>国产算力生态主导权</h6>
|
||
<p>通过技术壁垒与生态优势,推动国内AI产业从"可用"向"好用"升级</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 产业链与核心公司分析 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-diagram-3 me-2"></i>产业链与核心公司分析</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row mb-4">
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-primary">
|
||
<div class="card-body text-center">
|
||
<i class="bi bi-cpu-fill text-primary" style="font-size: 3rem;"></i>
|
||
<h5 class="mt-3">上游</h5>
|
||
<p>昇腾AI芯片、服务器等硬件供应商</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-success">
|
||
<div class="card-body text-center">
|
||
<i class="bi bi-gear-fill text-success" style="font-size: 3rem;"></i>
|
||
<h5 class="mt-3">中游</h5>
|
||
<p>昇腾计算生态服务商,包括CANN开发工具链、AI框架适配等</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-danger">
|
||
<div class="card-body text-center">
|
||
<i class="bi bi-building text-danger" style="font-size: 3rem;"></i>
|
||
<h5 class="mt-3">下游</h5>
|
||
<p>AI应用厂商,包括大模型开发者、行业解决方案商</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<h4 class="mb-3">CANN相关核心公司</h4>
|
||
<div class="table-responsive">
|
||
<table class="table table-hover">
|
||
<thead>
|
||
<tr>
|
||
<th>公司名称</th>
|
||
<th>项目/应用</th>
|
||
<th>技术/合作方</th>
|
||
<th>关联原因</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">皖</div>
|
||
<strong>皖通科技</strong>
|
||
</div>
|
||
</td>
|
||
<td>华东智能岸边理货系统-华为版</td>
|
||
<td>
|
||
<span class="tech-tag">Mindspore AI框架</span>
|
||
<span class="tech-tag">异构计算架构CANN</span>
|
||
<div class="mt-1">合作方: 华为</div>
|
||
</td>
|
||
<td>全资子公司与华为联合开发基于CANN的智能岸边理货系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">东</div>
|
||
<strong>东方国信</strong>
|
||
</div>
|
||
</td>
|
||
<td>大模型训练平台</td>
|
||
<td>
|
||
<span class="tech-tag">cuda到cann迁移</span>
|
||
<div class="mt-1">合作方: 华为, 中国移动</div>
|
||
</td>
|
||
<td>完成AI应用层产品向CANN架构迁移并协助运营商建设训练平台</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">华</div>
|
||
<strong>华平时尚</strong>
|
||
</div>
|
||
</td>
|
||
<td>阿克苏城市公共算力平台</td>
|
||
<td>
|
||
<span class="tech-tag">CANN计算架构</span>
|
||
<div class="mt-1">合作方: 新疆人民政府, 华为</div>
|
||
</td>
|
||
<td>三方战略合作建设公共算力平台并采用华为CANN技术</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">神</div>
|
||
<strong>神州数码</strong>
|
||
</div>
|
||
</td>
|
||
<td>异腾能力中心</td>
|
||
<td>
|
||
<span class="tech-tag">异腾基础硬件</span>
|
||
<span class="tech-tag">CANN框架</span>
|
||
</td>
|
||
<td>构建包含CANN框架的异腾硬件开发支持体系</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">中</div>
|
||
<strong>中新赛克</strong>
|
||
</div>
|
||
</td>
|
||
<td>网络空间数据处理</td>
|
||
<td>
|
||
<span class="tech-tag">CANN计算架构</span>
|
||
</td>
|
||
<td>CANN架构应用于数据全生命周期管理</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">云</div>
|
||
<strong>云从科技</strong>
|
||
</div>
|
||
</td>
|
||
<td>大模型开发</td>
|
||
<td>
|
||
<span class="tech-tag">华为原生开发</span>
|
||
<span class="tech-tag">CANN架构</span>
|
||
</td>
|
||
<td>基于CANN技术开展大模型及应用开发</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">东</div>
|
||
<strong>东华软件</strong>
|
||
</div>
|
||
</td>
|
||
<td>长沙人工智能中心</td>
|
||
<td>
|
||
<span class="tech-tag">CANN算子库</span>
|
||
<div class="mt-1">生态建设: 人工智能生态系统</div>
|
||
</td>
|
||
<td>参与建设包含CANN组件的人工智能生态系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">拓</div>
|
||
<strong>拓维信息</strong>
|
||
</div>
|
||
</td>
|
||
<td>湘江鲲鹏服务器</td>
|
||
<td>
|
||
<span class="tech-tag">CANN架构</span>
|
||
</td>
|
||
<td>AI服务器产品支持CANN架构</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">观</div>
|
||
<strong>观想科技</strong>
|
||
</div>
|
||
</td>
|
||
<td>自主可控算力底座</td>
|
||
<td>
|
||
<span class="tech-tag">异构计算架构</span>
|
||
</td>
|
||
<td>设计基于异构架构的自主可控算力平台</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">芯</div>
|
||
<strong>芯原股份</strong>
|
||
</div>
|
||
</td>
|
||
<td>高端处理器平台</td>
|
||
<td>
|
||
<span class="tech-tag">异构计算架构</span>
|
||
<div class="mt-1">客户: 华为</div>
|
||
</td>
|
||
<td>高端处理器平台采用异构架构技术并服务华为</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<div class="d-flex align-items-center">
|
||
<div class="company-logo">格</div>
|
||
<strong>格灵深瞳</strong>
|
||
</div>
|
||
</td>
|
||
<td>AI解决方案</td>
|
||
<td>
|
||
<span class="tech-tag">异构计算架构</span>
|
||
</td>
|
||
<td>推出适配CANN架构的AI软硬件解决方案</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 潜在风险与挑战 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-shield-exclamation me-2"></i>潜在风险与挑战</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="row">
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-danger">
|
||
<div class="card-header bg-danger text-white">
|
||
<h5 class="mb-0"><i class="bi bi-cpu me-2"></i>技术风险</h5>
|
||
</div>
|
||
<div class="card-body">
|
||
<ul>
|
||
<li>算子适配复杂度高,不同大模型的算子需求差异较大</li>
|
||
<li>跨设备协同效率待优化,万卡集群训练效率较英伟达A100集群仍有约10%-15%的差距</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-warning">
|
||
<div class="card-header bg-warning text-dark">
|
||
<h5 class="mb-0"><i class="bi bi-currency-dollar me-2"></i>商业化风险</h5>
|
||
</div>
|
||
<div class="card-body">
|
||
<ul>
|
||
<li>昇腾AI服务器采购成本较英伟达A系列服务器高约30%-50%</li>
|
||
<li>行业解决方案标准化程度低,需投入更多资源进行定制化开发</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card h-100 border-info">
|
||
<div class="card-header bg-info text-white">
|
||
<h5 class="mb-0"><i class="bi bi-globe me-2"></i>政策与竞争风险</h5>
|
||
</div>
|
||
<div class="card-body">
|
||
<ul>
|
||
<li>国际技术封锁加剧,昇腾AI芯片的先进制程依赖台积电代工</li>
|
||
<li>燧原科技、壁仞科技等厂商推出基于国产芯片的AI计算解决方案,竞争加剧</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 投资启示 -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3 class="mb-0"><i class="bi bi-lightbulb me-2"></i>投资启示</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="highlight-box">
|
||
<h5>综合结论</h5>
|
||
<p>昇腾异构计算架构-CANN是华为昇腾AI计算平台的核心软件组件,通过连接上层AI框架与底层昇腾硬件,实现计算效率的最大化。未来,随着CANN 7.0版本的推广及大模型应用的深化,CANN有望进一步巩固其在国产算力生态中的核心地位。</p>
|
||
</div>
|
||
|
||
<div class="row mt-4">
|
||
<div class="col-md-6">
|
||
<h5><i class="bi bi-star text-warning me-2"></i>重点关注</h5>
|
||
<ul>
|
||
<li><strong>核心合作伙伴</strong>:软通动力、拓维信息、中国软件国际等与CANN强相关的核心合作伙伴</li>
|
||
<li><strong>算子开发与行业解决方案商</strong>:算子开发服务商与行业解决方案商将通过为CANN生态提供定制化支持,获得持续的业务增长</li>
|
||
</ul>
|
||
</div>
|
||
<div class="col-md-6">
|
||
<h5><i class="bi bi-exclamation-circle text-danger me-2"></i>警惕风险</h5>
|
||
<ul>
|
||
<li><strong>技术风险</strong>:关注CANN算子适配进度、跨设备协同效率等关键技术指标</li>
|
||
<li><strong>竞争压力</strong>:来自燧原科技、壁仞科技等厂商的竞争压力</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<footer class="bg-dark text-white py-4 mt-5">
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-md-6">
|
||
<h5>昇腾异构计算架构-CANN</h5>
|
||
<p class="mb-0">华为昇腾AI计算平台的核心软件组件</p>
|
||
</div>
|
||
<div class="col-md-6 text-md-end">
|
||
<p class="mb-0">数据来源:公开信息整理 | 更新时间:2024年</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||
</body>
|
||
</html>
|