Azure 架构师学习笔记 - Azure AI(1)- 概述

本文属于【Azure 架构师学习笔记】系列

本文属于【Azure AI】系列。

前言

作为云环境的使用者,不了解AI是不可接受的, 但是正如大数据这么多年都没有被正式定义一样,AI更加如此,所以我不打算铺开太多,我计划使用25篇左右的文章覆盖一下最近从0 开始入门AI 的经历。

首先第一篇Azure AI 的概述,关于Azure AI或者microsoft AI, 先要了解其生态系统, 从下图可以看到包含了非常多的服务,绝大部分是基于Azure的。

但是由于太过复杂,不便于入门,所以精简出下面三大部分:

服务全景图(2024年最新版)

服务类别 服务名称 核心定位 适用场景 定价层
认知服务 计算机视觉 图像分析、对象检测 电商商品识别、医疗影像分析 F0 (免费)
语言服务 文本分析、情感分析 客户反馈分析、内容审核 F0 (免费)
语音服务 语音转文本、文本转语音 会议记录、语音助手 F0 (免费)
搜索服务 智能搜索、语义检索 电商搜索、文档知识库 S1 (基础)
AI平台 Azure Machine Learning 端到端ML开发平台 自定义模型训练、部署 F0 (免费)
Azure OpenAI GPT-4、DALL-E等生成式AI 智能对话、内容生成 按用量付费
行业解决方案 Healthcare 医疗影像分析、电子病历 医院诊断辅助 定制化
Retail 客户行为分析、库存优化 零售智能门店 定制化
AI工具 Azure AI Studio 低代码AI应用构建 业务人员快速开发AI应用 F0 (免费)
Azure AI Foundry 企业级AI模型开发 金融风控、工业预测 企业级

Azure AI核心差异化优势:

✅ 全栈AI体验:从认知服务到OpenAI到ML平台,提供端到端体验

✅ 企业级集成:无缝集成Microsoft 365、Azure AD、Power BI

✅ 生成式AI领导力:OpenAI战略合作伙伴,直接访问GPT-4

✅ 成本优势:免费层(F0)覆盖基础使用,避免意外费用

环境准备

为了避免过于理论化,这里先搭建好环境以便后续演示。接下来我将使用Terraform 进行部署。

可以使用下面的powershell以管理员身份创建terraform的凭证,我们将借用service principal来进行资源的创建。

powershell 复制代码
$sp = az ad sp create-for-rbac --name "terraform-ai-ecosystem" --role "Contributor" --scopes "/subscriptions/$(az account show --query id -o tsv)" | ConvertFrom-Json

# 保存凭据 (请安全存储)
Write-Host "Client ID: $($sp.appId)"
Write-Host "Client Secret: $($sp.password)"
Write-Host "Tenant ID: $($sp.tenant)"
Write-Host "Subscription ID: $(az account show --query id -o tsv)"

接下来创建terraform所需的文件及结构,如下:

azure-ai-ecosystem/

├── main.tf # 主配置文件,定义核心资源

├── variables.tf # 变量定义

├── outputs.tf # 输出定义

├── providers.tf # 提供者配置

├── terraform.tfvars # 变量值

└── README.md # 项目说明

下面是各个文件的具体内容:

powershell 复制代码
# providers.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "~> 3.0"  # 明确指定random提供者
    }
  }
  
  required_version = ">= 1.0"
}

provider "azurerm" {
  features {
    # 启用所有预览功能
    resource_group {
      prevent_deletion_if_contains_resources = false
    }
  }

  # 从变量读取认证信息
  client_id       = var.client_id
  client_secret   = var.client_secret
  tenant_id       = var.tenant_id
  subscription_id = var.subscription_id
}
powershell 复制代码
# variables.tf
variable "client_id" {
  description = "Azure Service Principal Client ID"
  type        = string
  sensitive   = true
}

variable "client_secret" {
  description = "Azure Service Principal Client Secret"
  type        = string
  sensitive   = true
}

variable "tenant_id" {
  description = "Azure Tenant ID"
  type        = string
}

variable "subscription_id" {
  description = "Azure Subscription ID"
  type        = string
}

variable "resource_group_name" {
  description = "Resource group name"
  type        = string
  default     = "rg-ai-ecosystem-lab"
}

variable "location" {
  description = "Azure region"
  type        = string
  default     = "eastus"
}

variable "environment" {
  description = "Environment tag"
  type        = string
  default     = "lab"
}
powershell 复制代码
# main.tf
# 随机字符串生成器,用于创建唯一资源名称
resource "random_string" "suffix" {
  length  = 6
  special = false
  upper   = false
  numeric = true  # 修复:将已弃用的"number"改为"numeric"
}

# 创建资源组
resource "azurerm_resource_group" "ai_lab" {
  name     = var.resource_group_name
  location = var.location

  tags = {
    environment = var.environment
    purpose     = "ai-ecosystem-learning"
  }
}

# 1. 计算机视觉服务
resource "azurerm_cognitive_account" "computer_vision" {
  name                = "cv-ecosystem-demo-${random_string.suffix.result}"
  location            = azurerm_resource_group.ai_lab.location
  resource_group_name = azurerm_resource_group.ai_lab.name
  kind                = "ComputerVision"
  sku_name            = "F0" # 免费层,适合学习
}

# 2. 语言服务 (包含文本分析)
resource "azurerm_cognitive_account" "language_service" {
  name                = "lang-ecosystem-demo-${random_string.suffix.result}"
  location            = azurerm_resource_group.ai_lab.location
  resource_group_name = azurerm_resource_group.ai_lab.name
  kind                = "TextAnalytics"
  sku_name            = "F0" # 免费层,适合学习
}

# 支持资源 - Application Insights (用于ML工作区)
resource "azurerm_application_insights" "app_insights" {
  name                = "ai-ecosystem-insights-${random_string.suffix.result}"
  location            = azurerm_resource_group.ai_lab.location
  resource_group_name = azurerm_resource_group.ai_lab.name
  application_type    = "web"
}

# 支持资源 - Key Vault (用于ML工作区)
resource "azurerm_key_vault" "key_vault" {
  name                     = "kv-ecosystem-${random_string.suffix.result}"
  location                 = azurerm_resource_group.ai_lab.location
  resource_group_name      = azurerm_resource_group.ai_lab.name
  tenant_id                = var.tenant_id
  sku_name                 = "standard"
  purge_protection_enabled = false

  access_policy {
    tenant_id = var.tenant_id
    object_id = data.azurerm_client_config.current.object_id

    key_permissions = [
      "Get", "List", "Create", "Delete"
    ]

    secret_permissions = [
      "Get", "List", "Set", "Delete"
    ]
  }
}

# 支持资源 - Storage Account (用于ML工作区)
resource "azurerm_storage_account" "storage" {
  name                     = "staiecosystem${random_string.suffix.result}"
  location                 = azurerm_resource_group.ai_lab.location
  resource_group_name      = azurerm_resource_group.ai_lab.name
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

# 3. Azure 机器学习工作区
resource "azurerm_machine_learning_workspace" "ml_workspace" {
  name                    = "ml-ecosystem-workspace"
  location                = azurerm_resource_group.ai_lab.location
  resource_group_name     = azurerm_resource_group.ai_lab.name
  application_insights_id = azurerm_application_insights.app_insights.id
  key_vault_id            = azurerm_key_vault.key_vault.id
  storage_account_id      = azurerm_storage_account.storage.id
  identity {
    type = "SystemAssigned"
  }

  tags = {
    environment = var.environment
  }
}

# 4. Azure Cognitive Search
resource "azurerm_search_service" "search_service" {
  name                = "search-ecosystem-demo-${random_string.suffix.result}"
  resource_group_name = azurerm_resource_group.ai_lab.name
  location            = azurerm_resource_group.ai_lab.location
  sku                 = "free" # 免费层,适合学习
}

# 获取当前客户端配置
data "azurerm_client_config" "current" {}
powershell 复制代码
# outputs.tf
output "resource_group_name" {
  value = azurerm_resource_group.ai_lab.name
}

output "computer_vision_endpoint" {
  value = azurerm_cognitive_account.computer_vision.endpoint
}

output "language_service_endpoint" {
  value = azurerm_cognitive_account.language_service.endpoint
}

output "ml_workspace_name" {
  value = azurerm_machine_learning_workspace.ml_workspace.name
}

output "search_service_endpoint" {
  value = "https://${azurerm_search_service.search_service.name}.search.windows.net"
}

output "random_suffix" {
  value     = random_string.suffix.result
  sensitive = false
}
powershell 复制代码
# terraform.tfvars
client_id       = "XXXXXXXXXXXXXXXXXXXXXX"  # 这里可以填入最开始创建SP 时返回的信息。
client_secret   = "XXXXXXXXXXXXXXXXXXXXXX" # 这里可以填入最开始创建SP 时返回的信息
tenant_id       = "XXXXXXXXXXXXXXXXXXXXXX" # 这里可以填入最开始创建SP 时返回的信息
subscription_id = "XXXXXXXXXXXXXXXXXXXXXX" # 这里可以填入最开始创建SP 时返回的信息

然后在powershell中按顺序执行:

powershell 复制代码
# 1. 重新初始化
terraform init

# 2. 规划部署
terraform plan -compact-warnings -out=tfplan

# 3. 如果规划成功,应用变更
terraform apply tfplan

# 查看所有输出
terraform output

# 保存输出到文件以便后续使用
terraform output -json > deployment_outputs.json

有时候因为网络原因可能会失败,重试一下可能就成功了。

在命令执行成功后可以在新建的资源组里面看到所需的资源创建成功。

小结

至此我们的环境已经初步搭建成功,接下来将开始进行"Azure机器学习工作区架构" 的介绍。

相关推荐
CCPC不拿奖不改名2 小时前
大语言模型的基础:大语言模型基础认知
人工智能·python·学习·语言模型·自然语言处理·面向对象·智能体
星火开发设计2 小时前
关系代数:数据库查询的数学基石与实战解析
数据库·学习·oracle·知识·关系代数
AI视觉网奇2 小时前
ue5 设置分辨率笔记
笔记·ue5
实战项目2 小时前
基于BERT的轻量级文本分类系统设计与优化
学习
是毛毛吧2 小时前
高效学习----告别“视频收藏夹吃灰”!计算机专业如何建立“输出倒逼输入”的学习闭环?
经验分享·学习
精致先生2 小时前
Milvus向量数据库
ai·大模型·milvus
烤麻辣烫2 小时前
java进阶--刷题与详解-1
java·开发语言·学习·intellij-idea
实战项目2 小时前
基于Python的智联招聘数据可视化分析
学习
世人万千丶2 小时前
鸿蒙跨端框架Flutter学习day 2、常用UI组件-折行布局 Wrap & Chip
学习·flutter·ui·华为·harmonyos·鸿蒙