3.4 pipeline syntax 4

本文介绍了GitLab CI/CD中关于`cache`的使用,包括缓存路径、全局设置、缓存键、缓存策略等。通过实例展示了如何在不同job间管理和共享缓存,以及如何根据文件变化更新缓存。同时,文章讨论了全局缓存可能导致的覆盖问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cache 缓存

用来指定需要在job之间缓存的文件或目录。只能使用该项目工作空间内的路径。不要使用缓存在阶段之间传递工件,因为缓存旨在存储编译项目所需的运行时依赖项。

如果在job范围之外定义了cache ,则意味着它是全局设置,所有job都将使用该定义。如果未全局定义或未按job定义则禁用该功能。

cache:paths

使用paths指令选择要缓存的文件或目录,路径是相对于项目目录,不能直接链接到项目目录之外。

$CI_PROJECT_DIR 项目目录

在job build中定义缓存,将会缓存target目录下的所有.jar文件。

build:
  script: test
  cache:
    paths:
      - target/*.jar

当在全局定义了cache:paths会被job中覆盖。以下实例将缓存binaries目录。

cache:
  paths:
    - my/files

build:
  script: echo "hello"
  cache:
    key: build
    paths:
      - target/

由于缓存是在job之间共享的,如果不同的job使用不同的路径就出现了缓存覆盖的问题。如何让不同的job缓存不同的cache呢?设置不同的

<think>好的,用户的问题是关于C#上位机如何连接AI。我需要先理解上位机和AI连接的具体场景。上位机通常指的是工业控制中的计算机,负责监控和控制设备,而AI可能指机器学习模型,比如用于数据分析、预测或图像识别。用户可能想知道如何在C#开发的上位机软件中集成AI功能。 首先,应该考虑通信方式。上位机可能需要调用AI模型的接口,比如通过HTTP请求访问部署在服务器上的模型,或者直接在本地运行模型。如果是本地运行,可能需要用到ONNX格式的模型,C#可以用ML.NET来加载和推理。如果是远程调用,可能需要使用REST API,用HttpClient类发送请求。 然后,数据处理部分。上位机采集的数据可能需要预处理,转换成模型需要的输入格式,比如张量。C#处理JSON或XML数据比较方便,可以使用Newtonsoft.Json或System.Text.Json库。 接下来,具体实现步骤。例如,使用ML.NET加载ONNX模型,进行推理。或者调用Python部署的Flask API,发送数据并接收结果。需要给出代码示例,比如用HttpClient发送POST请求,或者用ML.NET的PredictionEngine进行预测。 还要考虑异常处理和性能问题,比如网络延迟、模型推理时间等。可能需要异步编程来避免阻塞上位机的主线程。 最后,相关的问题可能涉及具体的库使用、模型部署方式、数据处理方法等。</think>在C#上位机开发中连接AI,通常涉及调用AI模型接口、处理数据交互和实现业务逻辑。以下是具体实现方式和代码示例: 1. **HTTP API调用(远程AI服务)** ```csharp using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; public class AIClient { private readonly HttpClient _client = new HttpClient(); public async Task<string> PredictAsync(float[] inputData) { var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { data = inputData }); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("http://ai-service:5000/predict", content); return await response.Content.ReadAsStringAsync(); } } // 使用示例 var aiClient = new AIClient(); var result = await aiClient.PredictAsync(new[] { 1.2f, 3.4f, 5.6f }); Console.WriteLine($"预测结果:{result}"); ``` 2. **本地ONNX模型推理(ML.NET)** ```csharp using Microsoft.ML; using Microsoft.ML.Transforms.Onnx; public class ModelInput { [VectorType(3)] public float[] Features { get; set; } } public class ModelOutput { [ColumnName("output_label")] public int PredictedLabel { get; set; } } public class LocalAIPredictor { private PredictionEngine<ModelInput, ModelOutput> _predictionEngine; public LocalAIPredictor(string modelPath) { var mlContext = new MLContext(); var pipeline = mlContext.Transforms.ApplyOnnxModel(modelPath); var model = pipeline.Fit(mlContext.Data.LoadFromEnumerable(new List<ModelInput>())); _predictionEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model); } public int Predict(float[] input) { return _predictionEngine.Predict(new ModelInput { Features = input }).PredictedLabel; } } ``` 3. **gRPC通信(高性能场景)** ```csharp // Proto文件定义(ai_service.proto) syntax = "proto3"; service AIService { rpc Predict (PredictRequest) returns (PredictResponse); } message PredictRequest { repeated float data = 1; } message PredictResponse { int32 result = 1; } // C#客户端实现 using Grpc.Net.Client; using AiService; var channel = Grpc.Net.Client.GrpcChannel.ForAddress("https://localhost:5001"); var client = new AIService.AIServiceClient(channel); var request = new PredictRequest(); request.Data.AddRange(new[] { 1.2f, 3.4f, 5.6f }); var response = await client.PredictAsync(request); Console.WriteLine($"gRPC响应:{response.Result}"); ``` **典型连接架构**: 1. 上位机采集设备数据 2. 数据预处理(归一化、格式转换) 3. 调用AI推理接口(本地/远程) 4. 解析返回结果 5. 根据结果执行控制逻辑 **注意事项**: - 使用异步编程避免UI阻塞 - 添加超时和重试机制 - 实现数据缓存和队列处理 - 注意线程安全问题 - 处理模型版本兼容性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huainian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值