php怎么调用华为云ModelArts_php如何部署自定义AI推理服务接口

轻雪姑娘_7508

轻雪姑娘_7508

2026-04-02

786人浏览

原创

华为云modelarts无官方php sdk,必须通过rest api调用;需先用iam获取token鉴权,再以x-auth-token调用在线服务,注意region、project id、service_name严格匹配,输入输出格式须与customize_service.py契约一致。

php怎么调用华为云modelarts_php如何部署自定义ai推理服务接口

ModelArts SDK for PHP 不可用,必须走 REST API

华为云官方未提供 PHP 官方 SDK,modelarts-sdk-php 不存在,所有调用都得直连 ModelArts 的 REST 接口。别浪费时间搜 SDK,直接准备 cURL 或 Guzzle 就行。

关键点:接口鉴权用 Token(非 AK/SK 直签),需先调 /v1/{project_id}/auth/token 换取短期 token;后续所有推理请求 Header 必须带 X-Auth-Token: {token}。

  • Token 有效期默认 24 小时,但生产环境建议每次请求前检查过期时间,或封装自动刷新逻辑
  • Project ID 从华为云控制台「总览」页右上角获取,不是 IAM 中的项目 ID,注意区分
  • Region 必须与部署模型的区域严格一致,比如模型在 cn-north-4,API 地址就得用 https://modelarts.cn-north-4.myhuaweicloud.com

如何调用已部署的在线服务(Real-time Service)

假设你已在 ModelArts 上完成模型训练、创建并启动了在线服务,服务 ID 是 svc-abc123xyz,那么调用路径是:/v1/{project_id}/services/{service_name}/invocations —— 注意这里不是 service_id,而是你在创建服务时填的 service_name(控制台可见,URL 友好名,非 UUID)。

示例请求(cURL):

curl -X POST 'https://modelarts.cn-north-4.myhuaweicloud.com/v1/your-project-id/services/my-cls-service/invocations' \
-H 'Content-Type: application/json' \
-H 'X-Auth-Token: your-token-here' \
-d '{"data": {"input": [[5.1,3.5,1.4,0.2]]}}'
  • 请求 body 格式由你部署时指定的「输入协议」决定:常见为 {"data": {"input": ...}} 或 {"instances": [...]},具体看部署服务时填写的「推理代码」中 model.predict() 的输入结构
  • 响应体里关键字段是 prediction 或 outputs,不是固定 key,得看你自己写的 customize_service.py 返回值
  • HTTP 状态码 400 多因 body 结构错或字段名不匹配;401 是 token 过期;404 常见于 service_name 拼错或区域不对

PHP 实现 token 获取 + 推理调用的最小可行代码

不要试图抽象成“通用 SDK”,先跑通再封装。以下代码省略异常捕获,但生产必须加:

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
$projectId = 'your-project-id';
$region = 'cn-north-4';
$serviceName = 'my-cls-service';
<p>// Step 1: 获取 token
$tokenUrl = "<a href="https://www.php.cn/link/e0e0efac42bf67642b4904c893b46725">https://www.php.cn/link/e0e0efac42bf67642b4904c893b46725</a>";
$tokenResp = json_decode(file_get_contents($tokenUrl, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'content' => json_encode([
'auth' => [
'identity' => [
'methods' => ['password'],
'password' => [
'user' => [
'name' => 'your-username',
'password' => 'your-password',
'domain' => ['name' => 'your-domain-name']
]
]
],
'scope' => ['project' => ['name' => $region]]
]
])
]
])), true);
$token = $tokenResp['token']['id'] ?? null;</p><p>// Step 2: 调用服务
$invocationUrl = "<a href="https://www.php.cn/link/9e4bbab2f64d76c5ec1acefe6d433b66">https://www.php.cn/link/9e4bbab2f64d76c5ec1acefe6d433b66</a>";
$result = json_decode(file_get_contents($invocationUrl, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nX-Auth-Token: {$token}\r\n",
'content' => json_encode(['data' => ['input' => [[5.1,3.5,1.4,0.2]]]])
]
])), true);</p>
  • 别用 file_get_contents 做生产调用,它不支持超时、重试、连接池;换成 GuzzleHttp\Client 并配置 timeout=30 和 connect_timeout=10
  • 用户名密码登录仅用于测试,生产必须用 IAM 角色委托或临时安全凭证(assume-role),否则密钥硬编码风险极高
  • ModelArts 在线服务冷启延迟明显,首次请求可能 >5s,需前端做好 loading 或后端加缓存兜底

自定义推理代码(customize_service.py)必须适配 PHP 请求格式

你写的 customize_service.py 决定了 PHP 怎么发数据、怎么解析结果。ModelArts 默认只认 data 字段,且要求返回 dict,不能 print 或 return list。

典型错误写法:

# ❌ 错误:没包在 data 里,或返回格式不符
def model_fn(model_dir):
    return joblib.load(os.path.join(model_dir, "model.pkl"))
<p>def input_fn(request_body, request_content_type):
return json.loads(request_body)['input']  # 直接取 input,但 PHP 发的是 {"data":{"input":...}}</p><p>def predict_fn(input_object, model):
return model.predict(input_object).tolist()  # 返回 list,但 ModelArts 要求 dict</p>

✅ 正确写法(适配上面 PHP 示例):

def input_fn(request_body, request_content_type):
    data = json.loads(request_body)
    return data.get('data', {}).get('input', [])  # 兜底防 keyerror
<p>def predict_fn(input_object, model):
result = model.predict(input_object)
return {'prediction': result.tolist()}  # 必须是 dict,key 自定义但要和 PHP 解析一致</p>
  • ModelArts 会把 predict_fn 返回值整个塞进 HTTP 响应 body,PHP 端需明确读 $result['prediction'],不是 $result['outputs']
  • 如果用了 TensorFlow/PyTorch,model_fn 加载模型耗时长,务必加日志确认是否真被缓存 —— ModelArts 不保证单实例多请求共享 model 对象
  • 本地调试时,用 curl -X POST http://localhost:8080/invocations 模拟,别等部署完才测

ModelArts 的 PHP 集成难点不在语法,而在链路太长:IAM 认证 → Token 管理 → 区域/Project/ServiceName 三者对齐 → 自定义代码输入输出契约 → 网络超时策略。任何一个环节填错一个字母,就卡在 4xx 里查半天。最省事的方式,是先用 Postman 把四步全跑通,再移植到 PHP。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10244

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6041

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2095

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3808

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4514

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3531

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5037

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3942

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11922

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习