华为云用户手册

  • 请求示例 DELETE https://192.168.0.90:30603/v2/agent/apis/chaincode/uninstall { "chaincode_name" : "chaincode1", "chaincode_version" : "1.0", "target_peers" : [ { "org_id" : "9802af57cfab764dc12b860c44b01969575e83c9", "peer_id" : "peer-9802af57cfab764dc12b860c44b01969575e83c9-1.peer-9802af57cfab764dc12b860c44b01969575e83c9.default.svc.cluster.local" } ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total_peer_num Integer 链代码操作Peer总数 success_peer_num Integer 操作成功Peer数量 fail_peer_num Integer 操作失败Peer数量 fail_peers Array of strings 操作失败Peer信息 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 Success { "total_peer_num" : 4, "success_peer_num" : 4, "fail_peer_num" : 0, "fail_peers" : [ ] } 状态码: 400 Bad Request { "error_code" : " BCS .4000013", "error_message" : "request body is too large" }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token 表2 请求Body参数 参数 是否必选 参数类型 描述 chaincode_name 是 String 链代码名称,以小写字母开头,支持小写字母和数字,长度6-25位 最小长度:6 最大长度:25 chaincode_version 是 String 链代码版本,只允许使用数字、点(.)、横杠(-),必须以数字开头和结尾,且点和横杠不能相邻 target_peers 是 Array of TargetPeer objects 卸载链代码peer信息 表3 TargetPeer 参数 是否必选 参数类型 描述 org_id 是 String peer所属组织ID peer_id 是 String Peer ID
  • 链代码示例(1.4风格) Fabric架构版本的 区块链 实例: 如下是一个账户转账的链代码示例(1.4风格)仅供安装实例化,若您需要调测请参考Fabric官方示例中的链代码。 package main import ( "fmt" "strconv" "github.com/hyperledger/fabric/core/chaincode/shim" pb "github.com/hyperledger/fabric/protos/peer" ) type SimpleChaincode struct { } // 初始化数据状态,实例化/升级链代码时被自动调用 func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { // println函数的输出信息会出现在链代码容器的日志中 fmt.Println("ex02 Init") // 获取用户传递给调用链代码的所需参数 _, args := stub.GetFunctionAndParameters() var A, B string // 两个账户 var Aval, Bval int // 两个账户的余额 var err error // 检查合法性, 检查参数数量是否为4个, 如果不是, 则返回错误信息 if len(args) != 4 { return shim.Error("Incorrect number of arguments. Expecting 4") } A = args[0] // 账户A用户名 Aval, err = strconv.Atoi(args[1]) // 账户A余额 if err != nil { return shim.Error("Expecting integer value for asset holding") } B = args[2] // 账户B用户名 Bval, err = strconv.Atoi(args[3]) // 账户B余额 if err != nil { return shim.Error("Expecting integer value for asset holding") } fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // 将账户A的状态写入账本中 err = stub.PutState(A, []byte(strconv.Itoa(Aval))) if err != nil { return shim.Error(err.Error()) } // 将账户B的状态写入账本中 err = stub.PutState(B, []byte(strconv.Itoa(Bval))) if err != nil { return shim.Error(err.Error()) } return shim.Success(nil) } // 对账本数据进行操作时(query, invoke)被自动调用 func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { fmt.Println("ex02 Invoke") // 获取用户传递给调用链代码的函数名称及参数 function, args := stub.GetFunctionAndParameters() // 对获取到的函数名称进行判断 if function == "invoke" { // 调用 invoke 函数实现转账操作 return t.invoke(stub, args) } else if function == "delete" { // 调用 delete 函数实现账户注销 return t.delete(stub, args) } else if function == "query" { // 调用 query 实现账户查询操作 return t.query(stub, args) } // 传递的函数名出错,返回 shim.Error() return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") } // 账户间转钱 func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { var A, B string // 账户A和B var Aval, Bval int // 账户余额 var X int // 转账金额 var err error if len(args) != 3 { return shim.Error("Incorrect number of arguments. Expecting 3") } A = args[0] // 账户A用户名 B = args[1] // 账户B用户名 // 从账本中获取A的余额 Avalbytes, err := stub.GetState(A) if err != nil { return shim.Error("Failed to get state") } if Avalbytes == nil { return shim.Error("Entity not found") } Aval, _ = strconv.Atoi(string(Avalbytes)) // 从账本中获取B的余额 Bvalbytes, err := stub.GetState(B) if err != nil { return shim.Error("Failed to get state") } if Bvalbytes == nil { return shim.Error("Entity not found") } Bval, _ = strconv.Atoi(string(Bvalbytes)) // X为转账金额 X, err = strconv.Atoi(args[2]) if err != nil { return shim.Error("Invalid transaction amount, expecting a integer value") } // 转账 Aval = Aval - X Bval = Bval + X fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // 更新转账后账本中A余额 err = stub.PutState(A, []byte(strconv.Itoa(Aval))) if err != nil { return shim.Error(err.Error()) } // 更新转账后账本中B余额 err = stub.PutState(B, []byte(strconv.Itoa(Bval))) if err != nil { return shim.Error(err.Error()) } return shim.Success(nil) } // 账户注销 func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { if len(args) != 1 { return shim.Error("Incorrect number of arguments. Expecting 1") } A := args[0] // 账户用户名 // 从账本中删除该账户状态 err := stub.DelState(A) if err != nil { return shim.Error("Failed to delete state") } return shim.Success(nil) } // 账户查询 func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { var A string var err error if len(args) != 1 { return shim.Error("Incorrect number of arguments. Expecting name of the person to query") } A = args[0] // 账户用户名 // 从账本中获取该账户余额 Avalbytes, err := stub.GetState(A) if err != nil { jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}" return shim.Error(jsonResp) } if Avalbytes == nil { jsonResp := "{\"Error\":\"Nil amount for " + A + "\"}" return shim.Error(jsonResp) } jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" fmt.Printf("Query Response:%s\n", jsonResp) // 返回转账金额 return shim.Success(Avalbytes) } func main() { err := shim.Start(new(SimpleChaincode)) if err != nil { fmt.Printf("Error starting Simple chaincode: %s", err) } } 父主题: Go语言链代码开发
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token 表2 FormData参数 参数 是否必选 参数类型 描述 chaincode_name 是 String 链代码名称,以小写字母开头,支持小写字母和数字 最小长度:6 最大长度:25 chaincode_version 是 String 链代码版本,只允许使用数字、点(.)、横杠(-),必须以数字开头和结尾,且点和横杠不能相邻 最小长度:1 最大长度:14 target_peers 是 String 链代码安装Peer列表信息,例如:[{"org_id":"9fb42c91458763990a45b62af92546a21f168dae","org_name":"organization3","peer_id":"peer-9fb42c91458763990a45b62af92546a21f168dae-0.peer-9fb42c91458763990a45b62af92546a21f168dae.default.svc.cluster.local","peer_name":"peer-0"}] description 否 String 链代码描述 chaincode_language 是 String 链代码编程语言,例如 golang db_type 否 String 账本数据存储方式,请按照实例创建时的账本数据存储方式填写。例如 goleveldb,couchdb security_check 否 String 链代码安全检查选项,目前只对golang语言链代码有效,true表示开启,false表示关闭,默认为false file 是 File 链代码zip文件
  • 请求示例 POST https://192.168.0.90:30603/v2/agent/apis/chaincode/install {chaincode_name:gochaincode3chaincode_version:2.0target_peers:[{"org_id":"9802af57cfab764dc12b860c44b01969575e83c9","org_name":"organization","peer_id":"peer-9802af57cfab764dc12b860c44b01969575e83c9-1.peer-9802af57cfab764dc12b860c44b01969575e83c9.default.svc.cluster.local","peer_name":"node-1"}]description:22222222chaincode_language:golangdb_type:goleveldbsecurity_check:true}
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 total_peer_num Integer 链代码操作Peer总数 success_peer_num Integer 操作成功Peer数量 fail_peer_num Integer 操作失败Peer数量 fail_peers Array of strings 操作失败Peer信息 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 Success { "total_peer_num" : 4, "success_peer_num" : 4, "fail_peer_num" : 0, "fail_peers" : [ ] } 状态码: 400 Bad Request { "error_code" : "B CS .4000013", "error_message" : "request body is too large" }
  • 响应示例 状态码: 200 Success { "peers" : { "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local" : { "org_name" : "organization", "org_id" : "a9e940a9e947e8af0c9c2fb98d0129e56210d6b5", "peer" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local", "peer_name" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-0", "url" : "100.95.146.117:30610", "channels" : [ "channel" ], "status" : "running" }, "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local" : { "org_name" : "organization", "org_id" : "a9e940a9e947e8af0c9c2fb98d0129e56210d6b5", "peer" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1.peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5.default.svc.cluster.local", "peer_name" : "peer-a9e940a9e947e8af0c9c2fb98d0129e56210d6b5-1", "url" : "100.95.146.117:30611", "channels" : [ "channel" ], "status" : "running" } } } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 result Array of ChannelInstantiateInfo objects 通道链代码实例化信息 表4 ChannelInstantiateInfo 参数 参数类型 描述 channel_name String 通道名称 instantiate_info InstantiateInfo object 实例化信息 endorsement_policy String 背书策略 version String 链代码版本 orgs_info Array of OrgInfo objects 通道组织信息 has_private_data Integer 是否有隐私数据,1表示有,0表示无 表5 InstantiateInfo 参数 参数类型 描述 status String 实例化状态,取值有CHAINCODE_INSTANTIATED(实例化成功),CHAINCODE_INSTANTIATION_INPROGRESS(实例化进行中),CHAINCODE_INSTANTIATION_FAILED(实例化失败) code String 实例化结果编码 reason String 实例化结果理由 detail String 实例化结果详情 表6 OrgInfo 参数 参数类型 描述 org_name String 组织名称 org_id String 组织ID 状态码: 400 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 Success { "result" : [ { "channel_name" : "channel", "instantiate_info" : { "status" : "CHAINCODE_INSTANTIATED", "code" : "1000", "reason" : "1000", "detail" : "" }, "endorsement_policy" : "OR,org1,org2", "version" : "2.0", "orgs_info" : [ { "org_name" : "org1", "org_id" : "65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3" }, { "org_name" : "org2", "org_id" : "a48c4ed995238eceaee3fe738f1871b2e58db350" } ], "has_private_data" : 0 } ] } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • URI GET /v2/agent/apis/channel/{channel_name}/transactions 表1 路径参数 参数 是否必选 参数类型 描述 channel_name 是 String 通道名称,名称长度限制:4-24,不能与系统通道名称(testchainid)相同 表2 Query参数 参数 是否必选 参数类型 描述 is_pagination 否 Boolean 是否分页,默认为否 缺省值:false offset 否 Integer 偏移量,默认为0 最小值:0 缺省值:0 limit 否 Integer 每页显示的条目数量,默认为10,取值范围为1-50 最小值:1 最大值:50 缺省值:10
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 count Integer 交易总数 data Array of TransactionSummary objects 交易 表5 TransactionSummary 参数 参数类型 描述 organization_name String 创建者组织 type String 交易类型 transaction_id String 交易id chaincode_name String 链码名称 timestamp String 时间戳 channel_name String 通道名称 creator_msp String 身份信息 chaincode_version String 链码版本 block_number Integer 区块号 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 请求示例 默认模式请求 GET https://192.168.0.90:30603/v2/agent/apis/channel/channel/transactions 分页模式请求 GET https://192.168.0.90:30603/v2/agent/apis/channel/channel/transactions?is_pagination=true&offset=1&limit=50
  • 响应示例 状态码: 200 Success { "count" : 1, "data" : [ { "block_number" : 0, "transaction_id" : "", "channel_name" : "channel", "creator_msp" : "e784724be5ed75f59b2809e4f0965a10679ae113MSP", "type" : "CONFIG", "chaincode_name" : "", "chaincode_version" : "", "timestamp" : "2021-01-20T14:38:27+08:00", "organization_name" : "orderer" } ] } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_msg" : "request body is too large" }
  • 链代码示例(2.0风格) Fabric架构版本的区块链实例: 如下是一个账户转账的链代码示例(2.0风格)仅供安装实例化,若您需要调测请参考Fabric官方示例中的链代码。 package main import ( "errors" "fmt" "strconv" "github.com/hyperledger/fabric-contract-api-go/contractapi" ) // 链码实现 type ABstore struct { contractapi.Contract } // 初始化链码数据,实例化或者升级链码时自动调用 func (t *ABstore) Init(ctx contractapi.TransactionContextInterface, A string, Aval int, B string, Bval int) error { // 使用println函数输出的信息会记录在链码容器日志中 fmt.Println("ABstore Init") var err error fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // 将状态数据写入账本 err = ctx.GetStub().PutState(A, []byte(strconv.Itoa(Aval))) if err != nil { return err } err = ctx.GetStub().PutState(B, []byte(strconv.Itoa(Bval))) if err != nil { return err } return nil } // A转账X给B func (t *ABstore) Invoke(ctx contractapi.TransactionContextInterface, A, B string, X int) error { var err error var Aval int var Bval int // 从账本获取状态数据 Avalbytes, err := ctx.GetStub().GetState(A) if err != nil { return fmt.Errorf("Failed to get state") } if Avalbytes == nil { return fmt.Errorf("Entity not found") } Aval, _ = strconv.Atoi(string(Avalbytes)) Bvalbytes, err := ctx.GetStub().GetState(B) if err != nil { return fmt.Errorf("Failed to get state") } if Bvalbytes == nil { return fmt.Errorf("Entity not found") } Bval, _ = strconv.Atoi(string(Bvalbytes)) // 执行转账 Aval = Aval - X Bval = Bval + X fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // 将状态数据重新写回账本 err = ctx.GetStub().PutState(A, []byte(strconv.Itoa(Aval))) if err != nil { return err } err = ctx.GetStub().PutState(B, []byte(strconv.Itoa(Bval))) if err != nil { return err } return nil } // 账户注销 func (t *ABstore) Delete(ctx contractapi.TransactionContextInterface, A string) error { // 从账本中删除账户状态 err := ctx.GetStub().DelState(A) if err != nil { return fmt.Errorf("Failed to delete state") } return nil } // 账户查询 func (t *ABstore) Query(ctx contractapi.TransactionContextInterface, A string) (string, error) { var err error // 从账本获取状态数据 Avalbytes, err := ctx.GetStub().GetState(A) if err != nil { jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}" return "", errors.New(jsonResp) } if Avalbytes == nil { jsonResp := "{\"Error\":\"Nil amount for " + A + "\"}" return "", errors.New(jsonResp) } jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" fmt.Printf("Query Response:%s\n", jsonResp) return string(Avalbytes), nil } func main() { cc, err := contractapi.NewChaincode(new(ABstore)) if err != nil { panic(err.Error()) } if err := cc.Start(); err != nil { fmt.Printf("Error starting ABstore chaincode: %s", err) } } 父主题: Go语言链代码开发
  • URI GET /v2/agent/apis/channel/{channel_name}/blocks 表1 路径参数 参数 是否必选 参数类型 描述 channel_name 是 String 通道名称,名称长度限制:4-24,不能与系统通道名称(testchainid)相同 表2 Query参数 参数 是否必选 参数类型 描述 is_pagination 否 Boolean 是否分页,默认为否 缺省值:false offset 否 Integer 偏移量,默认为0 最小值:0 缺省值:0 limit 否 Integer 每页显示的条目数量,默认为10,取值范围为1-50 最小值:1 最大值:50 缺省值:10
  • 响应示例 状态码: 200 Success { "count" : 1, "data" : [ { "block_number" : 0, "block_hash" : "Yux2Ea0RNZM95+3R95mvdlI8mH1dvmTSTylPwwzMsbY", "transaction_count" : 1, "data_hash" : "+3B6RFfbQisE8zt2BeWTvCwP1JbmQLIPeQoiKxoCQVA", "previous_hash" : "FlEClYDQJ4cHaEslex9usupte0EqbHyymQ+zUaQcjyE", "timestamp" : "2021-01-20T14:38:39+08:00", "organization_maps" : "{\"d565e95144ae53b9b3f556de613513f257e720ecMSP\":49}" } ] } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_msg" : "request body is too large" }
  • 响应示例 状态码: 200 Success { "user" : "admin", "token" : "ACiUxRlk2Jcu2d5bp2SyfP7abHV1nVKlo9Mm2AxI9dDN7mdHXXHBdg=kaIglHeZLTu6UeIu5YRcXTlpUPXylEG3ESNu0vIukrikG6SVhO393ds8rG+aRnZ+mMyookApP", "expire_time" : 1605867860701 } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • 响应示例 状态码: 200 Success { "result" : [ { "org_name" : "org1", "org_id" : "65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3", "peer_name" : "peer-0", "peer_id" : "peer-65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3-0.peer-65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3.default.svc.cluster.local", "install_status" : "uninstalled", "version" : "" }, { "org_name" : "org1", "org_id" : "65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3", "peer_name" : "peer-1", "peer_id" : "peer-65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3-1.peer-65cfb1c760f24058c865ffcfd8ce1cdb690bf2a3.default.svc.cluster.local", "install_status" : "installed", "version" : "1.0" } ] } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 result Array of PeerInstallInfo objects 节点链代码安装信息 表4 PeerInstallInfo 参数 参数类型 描述 org_name String 节点所在组织名称 org_id String 节点所在组织ID peer_name String 节点名称 peer_id String 节点ID install_status String 链代码安装情况:installed / uninstalled version String 链代码版本号 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 响应示例 状态码: 200 Success [ { "transaction_summary" : { "block_number" : 29, "transaction_id" : "6d704b217e17e16de71029b70f17a1ced35c055279f655dfd096bebf978a0546", "channelName" : "channel", "creator_msp" : "282f3c713ea1cec646aa7c640defca9c4f64bd88MSP", "type" : "ENDORSER_TRANSACTION", "chaincode_name" : "kvtest", "chaincode_version" : "1.0", "timestamp" : "2021-01-20T19:30:28+08:00", "organization_name" : "organization" }, "validation_code" : "VALID", "endorser_organizations" : [ "282f3c713ea1cec646aa7c640defca9c4f64bd88MSP" ], "proposal_hash" : "k1h2ewweWGrWNmmcu7UvzJ8Aw2G190SQzV+lBAAl4gw=", "read_set" : { "kvtest" : null, "lscc" : [ { "key" : "kvtest", "version" : { "block_num" : 2 } } ] }, "write_set" : { "kvtest" : [ { "key" : "a1", "is_delete" : false, "value" : "1" } ], "lscc" : [ ] } } ] 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_msg" : "request body is too large" }
  • 响应示例 状态码: 200 Success { "channel_id" : "channel", "block_height" : 2, "transaction_num" : 2 } 状态码: 400 Bad Request { "error_code" : "BCS.4000013", "error_message" : "request body is too large" }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 channel_id String 通道id block_height Integer 区块高度 transaction_num Integer 交易数量 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码 error_message String 错误描述 error_msg String 错误描述
  • 搜索资产 在各类资产模块页面,通过如下几种搜索方式可以提高资产的查找效率,快速找到适合的算法、模型、数据集、镜像、Workflow等资产。 图1 搜索资产 表1 快速搜索方式 区域 类型 搜索方式 支持的AI资产 1 搜索华为云官方资产 在页面单击“官方”,筛选出所有的华为云官方资产,该类资产均可免费使用。 Notebook、算法、模型 2 搜索精选商品 在页面单击“精选”,筛选出所有被标记为精选的资产。 Notebook、数据、算法、模型、Workflow 3 按标签搜索 在页面单击“所有标签”,选择标签,单击“确定”,筛选出相关资产。 Notebook、数据、算法、镜像、模型、Workflow 4 按排序方式搜索 在页面的排序列表选择排序方式,调整资产排序方式快速查找所需资产。 Notebook、数据、算法、镜像、模型、Workflow 5 搜索商用资产 在页面单击“商用”,筛选出所有的商业售卖资产。 算法、模型
  • 入驻AI Gallery 如果需要在AI Gallery中发布HiLens、报名实践活动或发布AI说,则需要先完成入驻AI Gallery。 如果没有入驻过AI Gallery,在报名实践活动或发布AI说时,将跳转至“欢迎入驻AI Gallery”页面。 在“欢迎入驻AI Gallery”页面,填写“昵称”和“邮箱”,并根据提示获取验证码。阅读并同意《华为云AI Gallery数字内容发布协议》和《华为云AI Gallery服务协议》后,单击“确定”完成入驻。 图1 入驻AI Gallery 注册完成后,您可以在AI Gallery中报名实践活动或发布技术文章(AI说)。 父主题: AI Gallery(旧版)
  • AI Gallery使用限制 目前自动学习产生的模型暂不支持发布到AI Gallery。 订阅或购买主要是获取AI资产的使用配额和使用权,支持在配额定义的约束下,有限地使用AI资产。 使用AI资产时,可能需要消耗硬件资源,硬件资源费用将根据实际使用情况,由华为云ModelArts等管理控制台向使用方收取。 已发布的AI资产,如果不需要在资产列表中展示该资产,可以将资产下架。下架后,已发布资产仅发布者可见。已经被订阅的资产,即便资产下架后,基于配额资源的约束,仍然可有效使用该资产,不会因为该资产的下架而产生使用问题。
  • 创建镜像资产 登录AI Gallery,单击右上角“我的Gallery”进入我的Gallery页面。 单击左上方“创建资产”,选择“镜像”。 在“创建镜像”弹窗中配置参数,单击“创建”。 表1 创建镜像 参数名称 说明 英文名称 必填项,镜像的英文名称。 如果没有填写“中文名称”,则资产发布后,在镜像页签上会显示该“英文名称”。 中文名称 镜像的中文名称。 如果填写了“中文名称”,则资产发布后,在镜像页签上会显示该“中文名称”。 描述 填写资产简介,镜像发布后将作为副标题显示在镜像页签上,方便用户快速了解资产。 支持0~90个字符,请勿在描述中输入涉政、迷信、违禁等相关敏感词,否则发布审核无法通过。 创建完成后,跳转至镜像详情页。
  • 上传镜像文件 在镜像详情页,选择“镜像文件”页签。 单击“添加文件”,进入上传文件页面,选择本地的数据文件单击“点击上传”或拖动文件,单击“确认上传”启动上传。 上传单个超过5GB的文件时,请使用Gallery CLI工具。CLI工具的获取和使用请参见Gallery CLI配置工具指南。 文件合集大小不超过50GB。 文件上传完成前,请不要刷新或关闭上传页面,防止意外终止上传任务,导致数据缺失。 当文件状态变成“上传成功”表示数据文件成功上传至AI Gallery仓库进行托管。单击“完成”返回镜像文件页面。 图1 上传成功 文件上传过程中请耐心等待,不要关闭当前上传页面,关闭页面会中断上传进程。
共100000条