尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

AI基础设施实战:从概念到部署,构建企业级AI能力栈

AI基础设施实战:从概念到部署,构建企业级AI能力栈 最近在技术圈里甲骨文Oracle的一则新闻引发了广泛讨论这家老牌数据库巨头正“举债重金押注 AI 基建”同时被曝出正在制定新一轮裁员计划。这看似矛盾的操作背后其实揭示了当前企业级技术市场一个深刻的转型趋势。对于开发者而言这不仅仅是财经新闻更是一个强烈的信号——AI基础设施AI Infra正在成为企业技术栈的核心而掌握相关技能将直接影响我们未来的职业发展路径。本文将从一个技术实践者的角度深入探讨“AI基建”究竟包含哪些具体的技术栈、工具和实践。我们会从概念入手逐步拆解一个现代AI基础设施的构成并通过一个完整的实战案例演示如何从零开始搭建一个支持大模型应用开发与部署的简易AI基础设施环境。无论你是后端开发、运维工程师还是对AI应用感兴趣的全栈开发者都能从中获得可以直接复用的知识和代码。1. AI 基建概念、范畴与技术栈在讨论甲骨文的战略之前我们首先要明确“AI基建”到底是什么。它不是一个单一的产品而是一个庞大的技术生态体系旨在为人工智能尤其是大语言模型的研发、训练、部署、管理和应用提供稳定、高效、可扩展的底层支撑。1.1 核心定义与解决的问题AI基础设施AI Infrastructure指的是支撑人工智能模型全生命周期数据准备、模型训练、微调、评估、部署、推理、监控所需的硬件、软件、平台和工具集合。它主要解决以下几个核心问题算力瓶颈大模型训练和推理需要巨大的计算资源GPU/TPU集群。AI基建提供弹性的、可管理的算力池。数据管理与处理海量、多模态数据的存储、清洗、标注和版本管理。开发与实验效率为算法工程师和研究人员提供快速实验、模型版本控制、超参数调优的环境。模型部署与运维MLOps将训练好的模型高效、稳定、安全地部署到生产环境并持续监控其性能、准确性和成本。工具链与平台化提供统一的平台降低AI应用开发门槛让应用开发者能更专注于业务逻辑。甲骨文作为传统的企业软件和云服务提供商其“重金押注AI基建”意味着它正在将其庞大的云数据中心、数据库技术、企业级服务能力与新的AI算力、AI开发平台进行深度融合以对抗AWS、Azure、Google Cloud在AI云市场的领先地位。1.2 现代AI基建的技术栈构成一个完整的AI基础设施通常包含以下层次我们可以将其类比为传统的Web开发架构层次对应传统架构AI基建核心组件代表技术/产品硬件层服务器、网络、存储计算加速硬件NVIDIA GPU (H100, A100), AMD MI300X, 自研AI芯片如Google TPU资源编排与调度层虚拟化、容器编排集群管理、任务调度Kubernetes (K8s), Slurm, AWS Batch, 基于K8s的AI调度器KubeFlow, Volcano计算框架层编程语言运行时分布式训练框架PyTorch (DDP, FSDP), TensorFlow, JAX, DeepSpeed, Megatron-LM开发与实验平台层IDE、开发环境模型开发平台JupyterLab, VS Code Remote, Docker, 云 Notebook 服务SageMaker Studio, Vertex AI Workbench模型管理与仓库层代码仓库Git模型注册中心MLflow Model Registry, Weights Biases (WB) Model Registry, Hugging Face Hub流水线与自动化层CI/CD (Jenkins, GitLab CI)MLOps 流水线KubeFlow Pipelines, MLflow Projects, Airflow, Metaflow部署与推理服务层应用服务器Tomcat, Nginx模型推理服务TensorFlow Serving, TorchServe, Triton Inference Server, KServe, Seldon Core监控与可观测层APM应用性能监控模型监控Prometheus Grafana定制指标 WhyLabs Fiddler Arize AI对于大多数企业和开发团队并非需要自建所有层次。云服务商如AWS SageMaker, GCP Vertex AI, Azure Machine Learning提供了全托管的平台而像 Hugging Face、Replicate 等则提供了更聚焦于模型部署与推理的服务。甲骨文的策略正是希望提供一套从底层IaaS到顶层AI PaaS的完整企业级解决方案。2. 环境准备搭建本地AI开发与实验环境在深入云原生AI基建之前我们先在本地搭建一个最小化的AI开发环境。这个环境可以用于学习、实验和小型模型的微调是理解整个AI基建流程的基础。2.1 基础软件与版本说明我们将使用以下技术栈它们都是当前AI开发领域的事实标准操作系统Ubuntu 22.04 LTS 或 Windows WSL2 (Ubuntu)。本文以 Ubuntu 22.04 为例。编程语言Python 3.10 或 3.11。这是PyTorch/TensorFlow主要支持的版本。容器运行时Docker 24.0 与 Docker Compose v2。用于环境隔离和依赖管理。Python 环境管理Miniconda 或 venv。强烈推荐使用Conda管理包含CUDA等系统依赖的复杂环境。深度学习框架PyTorch 2.0。我们将以其为例。模型与数据集仓库Hugging Facetransformers和datasets库。重要提示以下版本为示例请根据你的硬件特别是GPU型号和PyTorch官网的安装命令生成器进行调整。2.2 逐步安装与配置2.2.1 安装 Miniconda 和创建环境首先安装Miniconda来管理独立的Python环境。# 下载最新的Miniconda安装脚本Linux x86_64 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 运行安装脚本按照提示操作通常一路回车和yes bash Miniconda3-latest-Linux-x86_64.sh # 安装完成后关闭并重新打开终端或运行以下命令激活conda source ~/.bashrc # 创建一个名为ai-infra-demo的Python 3.10环境 conda create -n ai-infra-demo python3.10 -y # 激活该环境 conda activate ai-infra-demo2.2.2 安装 PyTorch 与 CUDA访问 PyTorch 官网 选择你的CUDA版本。假设你有一张支持CUDA 11.8的NVIDIA GPU。# 在激活的 conda 环境中安装 PyTorch、TorchVision、TorchAudio 和 CUDA 11.8 支持 conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia # 验证安装和GPU是否可用 python -c import torch; print(fPyTorch version: {torch.__version__}); print(fCUDA available: {torch.cuda.is_available()}); print(fGPU name: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else \No GPU\})预期输出类似PyTorch version: 2.1.0 CUDA available: True GPU name: NVIDIA GeForce RTX 40902.2.3 安装 Hugging Face 生态系统及其他工具库pip install transformers datasets accelerate evaluate peft trl pip install jupyterlab ipywidgets pip install mlflow pip install scikit-learn pandas numpy matplotlib seaborn2.2.4 安装 Docker 和 Docker Compose# 卸载旧版本如有 sudo apt-get remove docker docker-engine docker.io containerd runc # 设置仓库 sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装 Docker Engine sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 将当前用户添加到docker组避免每次使用sudo sudo usermod -aG docker $USER # **重要需要重新登录或重启终端使组更改生效** # 验证安装 docker --version docker compose version至此一个支持GPU加速的本地AI开发环境就准备好了。这个环境已经具备了模型实验、微调和简单服务化的能力。3. 核心组件实战构建一个简易的模型服务化管道理解了技术栈后我们通过一个实战项目来串联AI基建中的几个关键环节模型开发 - 模型管理 - 服务化部署 - 监控。我们将使用一个开源的文本生成模型并利用 MLflow 和 TorchServe 来构建管道。3.1 项目结构与目标项目目标将facebook/opt-125m模型进行本地部署提供一个HTTP API接口用于文本生成并使用MLflow跟踪实验和注册模型。项目结构ai_infra_project/ ├── train.py # 模型微调/训练脚本本例简化仅做加载和记录 ├── serve_model.py # 使用 TorchServe 部署模型的配置生成脚本 ├── model_handler.py # TorchServe 自定义处理器 ├── docker-compose.yml # 编排 MLflow 和 监控服务 ├── requirements.txt └── README.md3.2 步骤一使用 MLflow 跟踪实验并注册模型MLflow 是一个管理机器学习生命周期的开源平台我们首先用它来记录我们的模型。1. 创建项目目录和依赖文件mkdir ai_infra_project cd ai_infra_project创建requirements.txtmlflow2.0 torch2.0 transformers4.30 accelerate2. 编写训练与模型记录脚本 (train.py)这个脚本模拟一个“训练”过程加载预训练模型记录一些参数和评估指标最后将模型日志和模型本身保存到MLflow。# train.py import mlflow import mlflow.pytorch from transformers import AutoModelForCausalLM, AutoTokenizer import torch def main(): # 设置 MLflow 跟踪的URI本地文件系统 mlflow.set_tracking_uri(file:./mlruns) # 设置实验名称 mlflow.set_experiment(OPT-125m-Demo) model_name facebook/opt-125m print(fLoading model and tokenizer: {model_name}) # 加载模型和分词器 tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained(model_name) # 开始一个 MLflow Run with mlflow.start_run() as run: # 记录超参数示例 mlflow.log_param(model_name, model_name) mlflow.log_param(learning_rate, 2e-5) mlflow.log_param(batch_size, 4) # 模拟训练并记录指标示例 for epoch in range(3): # 模拟3个epoch mock_loss 0.5 * (0.9 ** epoch) # 模拟损失下降 mlflow.log_metric(train_loss, mock_loss, stepepoch) print(fEpoch {epoch}: loss {mock_loss:.4f}) # 记录一个评估指标 mlflow.log_metric(final_perplexity, 15.3) # **核心将 PyTorch 模型记录到 MLflow** # 这里我们记录整个 transformers pipeline便于后续部署 from transformers import pipeline text_generator pipeline(text-generation, modelmodel, tokenizertokenizer, device0 if torch.cuda.is_available() else -1) # 使用 mlflow.transformers 记录需要 mlflow 2.0 # 先保存模型到本地临时目录再用 mlflow 记录 import tempfile import os with tempfile.TemporaryDirectory() as tmpdir: model_save_path os.path.join(tmpdir, opt-125m-mlflow) text_generator.save_pretrained(model_save_path) # 记录整个模型目录 mlflow.log_artifacts(model_save_path, artifact_pathmodel) print(fModel and metrics logged to MLflow run: {run.info.run_id}) # 可选将当前运行的模型注册到 MLflow Model Registry # mlflow.register_model(fruns:/{run.info.run_id}/model, opt-125m-text-gen) if __name__ __main__: main()运行此脚本conda activate ai-infra-demo pip install -r requirements.txt python train.py运行后会在当前目录下生成一个mlruns文件夹里面存储了所有实验数据、参数、指标和模型文件。你可以通过mlflow ui命令启动Web界面查看。3.3 步骤二使用 TorchServe 部署模型为 HTTP APITorchServe 是 PyTorch 官方提供的模型服务化工具。我们需要将模型打包成.mar文件并启动服务。1. 安装 TorchServe 和依赖pip install torchserve torch-model-archiver2. 创建自定义处理器 (model_handler.py)TorchServe 需要知道如何预处理请求和后处理响应。# model_handler.py import torch import logging import json import transformers from ts.torch_handler.base_handler import BaseHandler logger logging.getLogger(__name__) class TransformersTextGenerationHandler(BaseHandler): def __init__(self): super().__init__() self.initialized False self.model None self.tokenizer None self.device None def initialize(self, context): 加载模型和分词器 self.manifest context.manifest properties context.system_properties model_dir properties.get(model_dir) # 确定设备 self.device torch.device( cuda: str(properties.get(gpu_id)) if torch.cuda.is_available() and properties.get(gpu_id) is not None else cpu ) logger.info(fUsing device: {self.device}) # 从 MLflow 记录的路径加载模型和分词器 # 在实际部署中model_dir 指向的是我们打包的 .mar 文件解压后的路径 # 这里假设模型文件在 model 子目录下 from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline model_path model_dir # TorchServe 会自动处理 self.tokenizer AutoTokenizer.from_pretrained(model_path) self.model AutoModelForCausalLM.from_pretrained(model_path).to(self.device) self.generator pipeline(text-generation, modelself.model, tokenizerself.tokenizer, deviceself.device) self.initialized True logger.info(Model and tokenizer initialized successfully) def preprocess(self, data): 预处理请求数据 # 假设请求格式为 JSON: {text: The future of AI is, max_length: 50} input_text data[0].get(body).decode(utf-8) input_data json.loads(input_text) prompt input_data.get(text, ) self.max_length input_data.get(max_length, 50) return prompt def inference(self, prompt): 执行推理 with torch.no_grad(): result self.generator(prompt, max_lengthself.max_length, do_sampleTrue, temperature0.9) generated_text result[0][generated_text] return [generated_text] def postprocess(self, inference_output): 后处理推理结果返回响应 # 将结果包装成 JSON 格式 return [json.dumps({generated_text: inference_output[0]})] def handle(self, data, context): 主处理流程 if not self.initialized: self.initialize(context) prompt self.preprocess(data) output self.inference(prompt) return self.postprocess(output)3. 打包模型为.mar文件首先我们需要将 MLflow 保存的模型文件复制到一个固定目录。假设我们使用最后一次运行的模型。# 找到最新的模型目录这里简化处理手动指定 # 假设 mlruns/0/run_id/artifacts/model 是模型路径 # 将其复制到 model_store 目录 mkdir -p model_store cp -r mlruns/0/你的run_id/artifacts/model/* ./model_store/ # 生成 .mar 文件 torch-model-archiver --model-name opt125m \ --version 1.0 \ --serialized-file ./model_store/pytorch_model.bin \ --handler ./model_handler.py \ --extra-files ./model_store/config.json,./model_store/tokenizer.json,./model_store/tokenizer_config.json \ --export-path ./model_store \ --force运行后会在./model_store目录下生成opt125m.mar文件。4. 启动 TorchServe# 启动服务指定模型存储路径和推理端口 torchserve --start --model-store ./model_store --models opt125mopt125m.mar --ncs --ts-config ./config.properties你需要创建一个config.properties文件来配置工作线程数等参数inference_addresshttp://0.0.0.0:8080 management_addresshttp://0.0.0.0:8081 number_of_gpu1 worker_threads_per_model45. 测试推理 API服务启动后可以使用curl进行测试curl -X POST http://localhost:8080/predictions/opt125m \ -H Content-Type: application/json \ -d {text: The future of AI infrastructure is, max_length: 30}预期会返回一个包含生成文本的 JSON 响应。3.4 步骤三使用 Docker Compose 编排 MLflow UI 和监控为了更接近生产环境我们使用 Docker Compose 来一键启动 MLflow 的跟踪服务器和前端UI。创建docker-compose.yml文件# docker-compose.yml version: 3.8 services: mlflow-tracking: image: ghcr.io/mlflow/mlflow:latest container_name: mlflow-tracking-server ports: - 5000:5000 volumes: - ./mlruns:/mlflow/mlruns # 挂载本地实验数据目录 command: mlflow server --backend-store-uri file:/mlflow/mlruns --default-artifact-root file:/mlflow/mlruns --host 0.0.0.0 --port 5000 networks: - ai-infra-net # 可以添加一个简单的监控看板如 Grafana来可视化系统资源可选 prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - ai-infra-net grafana: image: grafana/grafana:latest container_name: grafana ports: - 3000:3000 environment: - GF_SECURITY_ADMIN_PASSWORDadmin volumes: - grafana-storage:/var/lib/grafana networks: - ai-infra-net depends_on: - prometheus networks: ai-infra-net: driver: bridge volumes: grafana-storage:创建 Prometheus 配置文件prometheus.yml# prometheus.yml global: scrape_interval: 15s scrape_configs: - job_name: torchserve static_configs: - targets: [host.docker.internal:8082] # TorchServe 管理端口需要暴露metrics注意需要配置 TorchServe 暴露 metrics 端口8082并在config.properties中启用metrics_modeprometheus。这属于更进阶的监控配置。启动服务docker compose up -d现在你可以通过http://localhost:5000访问 MLflow UI查看之前记录的所有实验和模型。4. 常见问题与排查思路FAQ在搭建和运行上述AI基础设施组件时你可能会遇到以下常见问题问题现象可能原因排查思路与解决方案torch.cuda.is_available()返回 False1. NVIDIA驱动未安装或版本太旧。2. CUDA Toolkit 版本与 PyTorch 版本不匹配。3. Conda 环境中的cudatoolkit包未正确安装。1. 运行nvidia-smi检查驱动和GPU状态。2. 在 PyTorch官网 使用正确的安装命令。3. 在Conda环境中运行conda list | grep cudatoolkit确认。MLflow UI 无法访问或看不到实验1.mlflow ui命令未在正确目录运行。2. 跟踪URI设置不一致。3. 端口被占用。1. 确保在包含mlruns目录的上级目录运行mlflow ui --host 0.0.0.0。2. 在代码和UI命令中使用相同的跟踪URI如file:./mlruns。3. 使用--port参数指定其他端口如--port 5001。TorchServe 启动失败或模型加载错误1..mar文件打包时缺少依赖文件。2. 自定义handler中有语法或逻辑错误。3. 模型文件路径错误或权限不足。1. 使用--extra-files确保包含所有配置文件config.json,tokenizer*。2. 单独运行python model_handler.py测试处理器逻辑。3. 检查model-store目录路径和文件权限。Docker Compose 服务启动失败1.docker-compose.yml语法错误。2. 端口冲突。3. 挂载的卷volume路径不存在。1. 使用docker compose config验证配置文件。2. 使用netstat -tulnp | grep 端口号检查端口占用。3. 确保./mlruns等本地目录存在或Docker有权限访问。推理API请求超时或返回错误1. 模型过大单次推理时间过长。2. TorchServe 工作线程数不足。3. 请求格式不符合handler预期。1. 在config.properties中增加default_response_timeout。2. 增加worker_threads_per_model数量。3. 使用curl -v查看详细请求/响应确保JSON格式正确。5. 企业级AI基建最佳实践与工程建议从我们的简易管道扩展到企业级生产环境需要考虑更多的工程化因素。结合甲骨文等云厂商的动向以下是构建稳健AI基础设施的关键实践5.1 计算资源管理与成本优化混合云与多云策略不要绑定单一云厂商。利用像Kubernetes这样的抽象层实现工作负载在本地数据中心和多个公有云如OCI, AWS, Azure间的可移植性。弹性伸缩与Spot实例对于训练任务使用可抢占实例Spot/Preemptible VMs大幅降低成本。对于推理服务根据流量指标QPS GPU利用率自动伸缩实例数量。GPU资源共享与隔离使用K8s设备插件如NVIDIA GPU Operator和资源配额ResourceQuota实现多团队、多项目间的GPU资源共享与公平调度。5.2 模型生命周期管理MLOps版本控制一切不仅代码用Git模型、数据、配置文件、甚至环境Docker镜像都需要严格的版本控制。MLflow、DVCData Version Control是常用工具。自动化流水线使用KubeFlow Pipelines、Airflow或GitLab CI/CD将数据预处理、训练、评估、部署串联成自动化流水线。确保每次代码提交都能触发完整的测试和验证流程。模型注册与治理建立中心化的模型注册中心如MLflow Model Registry。定义清晰的模型晋升流程Staging - Production - Archived并记录每次部署的模型版本、性能指标和责任人。5.3 推理服务的高可用与性能服务网格与流量管理在K8s上使用Istio或Knative进行灰度发布、A/B测试、金丝雀发布和流量切分。这对于模型迭代和回滚至关重要。模型优化与加速在生产部署前务必对模型进行优化。技术包括量化Quantization、剪枝Pruning、知识蒸馏Knowledge Distillation以及使用专用推理引擎如TensorRT, ONNX Runtime。批量推理与异步处理对于非实时性任务设计批量推理接口将请求队列化使用Redis或Kafka由Worker异步处理提高GPU利用率和系统吞吐量。5.4 监控、可观测性与安全多维监控系统层面GPU/CPU/内存使用率节点健康状态。服务层面请求延迟P50, P99、吞吐量QPS、错误率4xx, 5xx。模型层面输入数据分布漂移Data Drift、预测结果置信度、业务指标如点击率下降。安全与合规模型安全防止对抗性攻击、提示注入攻击针对LLM。数据安全训练和推理数据加密传输与存储满足GDPR等数据隐私法规。访问控制对模型仓库、训练集群、推理API实施严格的RBAC基于角色的访问控制。甲骨文等传统企业软件巨头进军AI基建其优势正在于将上述安全、合规、高可用、企业集成的能力与新的AI算力和平台结合提供给对稳定性要求极高的金融、电信、政府等行业客户。6. 总结从“使用AI”到“构建AI能力”通过本文的探讨和实战我们可以看到“AI基建”远不止是购买几块GPU服务器。它是一个涵盖硬件、软件、流程、人才的系统工程。甲骨文的战略调整反映了市场从“试用AI模型”向“构建企业级AI能力”的深刻转变。对于开发者和技术团队来说这意味着我们的技能树需要更新掌握核心工具链熟练使用PyTorch/TensorFlow、Hugging Face、MLflow、Docker、Kubernetes。理解MLOps理念将软件工程的最佳实践版本控制、CI/CD、监控应用到机器学习项目中。关注云原生AI服务了解各大云平台包括甲骨文云OCI的AI服务优劣能在自建和托管之间做出合理选择。深耕垂直领域AI基建最终要为业务服务。在金融、医疗、制造等特定领域数据格式、合规要求、性能指标都有特殊性需要定制化的基建方案。未来的AI应用开发将是“大模型能力”与“稳健基础设施”的结合。搭建好属于自己或团队的AI基建“底座”才能让创新的AI想法快速、稳定、可控地转化为实际生产力。
返回列表