Tüm Ürünler
Search
Belge Merkezi

Platform For AI:Standardize tagging for DLC, DSW, and EAS

Son Güncelleme:Oct 04, 2026

Etiket kuralları, çalışma alanı yöneticilerinin DLC, DSW ve EAS hizmetlerinde tutarlı bir etiketleme uygulamasını zorunlu kılmasını sağlar. Yöneticiler; gerekli etiket anahtarlarını, önceden tanımlanmış değerleri, açıklamaları ve ilgili ürün kapsamını belirler. Bir kural etkinleştirildiğinde makine öğrenimi geliştiricileri DLC işlerini, DSW örneklerini ve EAS hizmetlerini oluştururken bu etiketleri belirtmek zorundadır; etiketler otomatik olarak doğrulanır. Tutarlı etiketler maliyet dağıtımı, iş dağıtımı analizi ve kaynak tüketimi raporlaması gibi süreçlere destek olur.

Etiket kurallarını tanımlayın

Not

Etiket kurallarını yalnızca çalışma alanı sahipleri ve yöneticileri düzenleyebilir.

  1. Çalışma alanı ayrıntıları sayfasına gidin ve sağ üst köşede Configure Workspace > General Configurations seçeneklerine tıklayın.

  2. Aşağı kaydırarak Tag Configuration bölümüne gelin ve düzenleme moduna geçmek için Modify Configuration seçeneğine tıklayın.

  3. İhtiyacınıza göre etiket kuralları ekleyin, ardından Save düğmesine tıklayın. Yapılandırılan kurallar seçilen ürün kapsamında hemen geçerli olur. İlgili alt ürün sayfalarında bu etiketler varsayılan olarak zorunludur. Bir etiket eksikse veya kurala uygun değilse gönderim başarısız olur. Makine öğrenimi geliştiricileri etiket anahtarı ve değeri gereksinimleri karşılandığı sürece zorunlu etiketlerin yanı sıra özel etiketler de ekleyebilir.

    • Tag Key gereksinimleri: aliyun veya acs: ile başlayamaz, http:// veya https:// içermemelidir ve uzunluğu 128 karakteri aşmamalıdır. Yalnızca harfler, rakamlar, tire (-), Çince karakterler ve nokta (.) kabul edilir; alt çizgi (_) kullanılamaz.

    • Değer gereksinimleri: http:// veya https:// içermemelidir ve uzunluğu 256 karakteri aşmamalıdır. Birden fazla numaralandırılmış değeri virgülle ayırın.

    • Value Constraints: Bu seçenek etkinleştirildiğinde kullanıcılar önceden tanımlanmış değerler arasından seçim yapmak zorundadır ve özel değer giremez. Ekip genelinde tutarlı etiketlemeyi sağlamak için bu seçeneği etkinleştirin.

    • Applicable Services: Bu kuralın hangi alt ürünlere (DLC, DSW veya EAS) uygulanacağını seçin. En az bir ürün seçilmelidir.

Etiketleri uygulayın

Bir DLC işi gönderirken veya bir DSW ya da EAS örneği oluştururken çalışma alanı etiket kurallarına uygun olarak etiketleri uygulayın. Aşağıdaki adımlarda DLC işi gönderme işlemi örnek alınmıştır:

  1. DLC konsoluna gidin ve Create Job seçeneğine tıklayın.

  2. İş yapılandırma sayfasında Tag bölümünü bulun ve çalışma alanı etiket kurallarına göre anahtar-değer çiftlerini girin.

    İş oluşturma sırasında özel etiketler de ekleyebilirsiniz.
  3. Gerekli tüm etiketleri doldurduktan sonra işi gönderin.

Önemli

Etiket kuralları gönderim sırasında doğrulanır. Gerekli bir etiket eksikse veya değer kurala uymuyorsa gönderim bir hata mesajıyla birlikte başarısız olur.

İşleri etikete göre filtreleyin

DLC iş listesinde etiket tabanlı filtreleme kullanarak iş dağıtımını ve kaynak kullanımını senaryoya, model türüne veya diğer kriterlere göre analiz edin.

  1. DLC konsolu iş listesi sayfasına gidin.

  2. Arama çubuğunda filtre koşulu olarak Tag seçeneğini belirleyin, etiket anahtarını ve değerini girin ve aramayı başlatın. Liste yalnızca ölçütle eşleşen işleri gösterir.

Ek bilgiler

API referansı

Etiket kurallarını toplu olarak yapılandırmak veya otomasyon işlem hatlarıyla entegre etmek için aşağıdaki kod örneklerini kullanın. Kodu çalıştırmadan önce bölge, çalışma alanı ID'si ve AccessKey ID ile Secret değerlerini değiştirin.

Etiket kurallarını toplu olarak yapılandırın

UpdateConfigs API'si önceden tanımlanmış etiket kurallarının toplu yapılandırılmasını destekler ve aynı etiket yapılandırmasının birden çok çalışma alanına uygulanması için uygundur.

Örnek istek gövdesi yapısı:

{
  "Configs": [
    {
      "ConfigKey": "predefinedTags",
      "ConfigValue": "[{\"Type\":\"Tag\",\"Key\":\"scenario\",\"Value\":\"{\\\"Products\\\":\\\"DLC,DSW,EAS\\\",\\\"Values\\\":\\\"train,evluate,inference\\\",\\\"ValueFlexible\\\":false,\\\"Description\\\":\\\"select scenario\\\"}\"}]",
      "Labels": [
        {
          "Key": "system.categoryName",
          "Value": "CommonTagConfig"
        }
      ]
    }
  ]
}
            

Python örnek kodu: Etiket kurallarını toplu olarak yapılandırın

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PAI Workspace - Batch create/update predefined tag rules (CommonTagConfig)
API: PUT /api/v1/workspaces/{WorkspaceId}/configs
Before use, fill in ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION_ID, and WORKSPACE_ID,
and define tag rules in the TAGS list.
"""

import json, sys, hashlib, hmac, datetime, requests

ACCESS_KEY_ID     = "your-AccessKeyId"
ACCESS_KEY_SECRET = "your-AccessKeySecret"
REGION_ID         = "cn-hangzhou"
WORKSPACE_ID      = "your-workspace-ID"

ENDPOINT = f"aiworkspace.{REGION_ID}.aliyuncs.com"
API_PATH = f"/api/v1/workspaces/{WORKSPACE_ID}/configs"

# Tag definition: key-tag name, products-applicable products, values-allowed values, flexible-whether custom values are allowed, desc-description
TAGS = [
    {"key": "Scene",      "products": "DLC,DSW,EAS", "values": "Training,Evaluation,Inference",         "flexible": False, "desc": "Select the current use scenario"},
    {"key": "ModelType",  "products": "DLC,DSW",     "values": "NLP-Text,CV-Image,Multimodal",          "flexible": False, "desc": "Select the model type"},
    {"key": "ExpDirection","products": "DLC",         "values": "LR-Schedule,DataAugmentation,Distillation", "flexible": True, "desc": "Customize the experiment direction"},
]

def build_config_value(tags):
    arr = []
    for t in tags:
        inner = {"Products": t["products"], "Values": t["values"],
                 "ValueFlexible": t.get("flexible", False), "Description": t.get("desc", "")}
        arr.append({"Type": "Tag", "Key": t["key"], "Value": json.dumps(inner, ensure_ascii=False)})
    return json.dumps(arr, ensure_ascii=False)

def sign_request(method, path, headers, body):
    now = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
    headers.update({"x-acs-date": now, "x-acs-version": "2021-02-04",
                    "x-acs-action": "UpdateConfigs",
                    "x-acs-signature-nonce": hashlib.md5((now + body).encode()).hexdigest()})
    signed_keys = sorted(k for k in headers if k.startswith("x-acs-") or k in ("host", "content-type"))
    canonical_headers = "".join(f"{k}:{headers[k]}\n" for k in signed_keys)
    hashed_body = hashlib.sha256(body.encode("utf-8")).hexdigest()
    canonical_request = f"{method}\n{path}\n\n{canonical_headers}\n{';'.join(signed_keys)}\n{hashed_body}"
    string_to_sign = f"ACS3-HMAC-SHA256\n{hashlib.sha256(canonical_request.encode()).hexdigest()}"
    signature = hmac.new(ACCESS_KEY_SECRET.encode(), string_to_sign.encode(), hashlib.sha256).hexdigest()
    headers["Authorization"] = (f"ACS3-HMAC-SHA256 Credential={ACCESS_KEY_ID},"
                                 f"SignedHeaders={';'.join(signed_keys)},Signature={signature}")
    return headers

def main():
    config_value = build_config_value(TAGS)
    request_body = json.dumps({"Configs": [{"ConfigKey": "predefinedTags", "ConfigValue": config_value,
                                            "Labels": [{"Key": "system.categoryName", "Value": "CommonTagConfig"}]}]},
                              ensure_ascii=False)
    url = f"https://{ENDPOINT}{API_PATH}"
    headers = sign_request("PUT", API_PATH, {"host": ENDPOINT, "content-type": "application/json"}, request_body)
    resp = requests.put(url, headers=headers, data=request_body.encode("utf-8"), timeout=30)
    print(f"HTTP {resp.status_code}: {resp.text}")
    if resp.status_code != 200:
        sys.exit(1)

if __name__ == "__main__":
    main()

DLC işi gönderirken etiketleri belirtin

CreateJob API'si aracılığıyla bir DLC işi gönderirken etiketleri Settings.Tags alanında belirtin. Tüm gerekli etiketler doldurulmalıdır. ValueFlexible değeri true olan etiketler hariç değerler önceden tanımlanmış seçenekler arasından seçilmelidir; bu etiketler özel girişleri kabul eder.

Python örnek kodu: DLC işi gönderirken etiketleri belirtin

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PAI-DLC Submit training job (with predefined tags)
API: POST /api/v1/jobs (API version 2020-12-03)
Tags are placed in Settings.Tags as a dictionary {"tag-name": "tag-value"}.
"""

import json, sys, hashlib, hmac, datetime, time, requests

ACCESS_KEY_ID     = "your-AccessKeyId"
ACCESS_KEY_SECRET = "your-AccessKeySecret"
REGION_ID         = "cn-hangzhou"
WORKSPACE_ID      = "your-workspace-ID"
RESOURCE_ID       = ""  # Resource quota ID; leave empty to use public resources

DLC_ENDPOINT = f"pai-dlc.{REGION_ID}.aliyuncs.com"
DLC_API_PATH = "/api/v1/jobs"

# Fill in according to the workspace predefined tags; all predefined tags must be provided
TAGS = {
    "Scene":        "Training",
    "ModelType":    "NLP-Text",
    "ExpDirection": "Fine-grained-DataProcessing",
}

def sign_request(method, path, headers, body, action="CreateJob"):
    now = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
    headers.update({"x-acs-date": now, "x-acs-version": "2020-12-03", "x-acs-action": action,
                    "x-acs-signature-nonce": hashlib.md5((now + body).encode()).hexdigest()})
    signed_keys = sorted(k for k in headers if k.startswith("x-acs-") or k in ("host", "content-type"))
    canonical_headers = "".join(f"{k}:{headers[k]}\n" for k in signed_keys)
    hashed_body = hashlib.sha256(body.encode("utf-8")).hexdigest()
    canonical_request = f"{method}\n{path}\n\n{canonical_headers}\n{';'.join(signed_keys)}\n{hashed_body}"
    string_to_sign = f"ACS3-HMAC-SHA256\n{hashlib.sha256(canonical_request.encode()).hexdigest()}"
    signature = hmac.new(ACCESS_KEY_SECRET.encode(), string_to_sign.encode(), hashlib.sha256).hexdigest()
    headers["Authorization"] = (f"ACS3-HMAC-SHA256 Credential={ACCESS_KEY_ID},"
                                 f"SignedHeaders={';'.join(signed_keys)},Signature={signature}")
    return headers

def main():
    job = {
        "DisplayName": f"my-training-job-{int(time.time())}",
        "JobType": "PyTorchJob",
        "WorkspaceId": WORKSPACE_ID,
        "UserCommand": "echo hello && sleep 5",
        "JobSpecs": [{"Type": "Worker",
                      "Image": "registry.cn-hangzhou.aliyuncs.com/pai-dlc/pytorch-training:1.12-gpu-py39-cu116-ubuntu20.04",
                      "PodCount": 1, "EcsSpec": "ecs.g6.large"}],
        "Settings": {"Tags": TAGS},  # Tags are placed in Settings.Tags
    }
    if RESOURCE_ID:
        job["ResourceId"] = RESOURCE_ID
    request_body = json.dumps(job, ensure_ascii=False)
    url = f"https://{DLC_ENDPOINT}{DLC_API_PATH}"
    headers = sign_request("POST", DLC_API_PATH, {"host": DLC_ENDPOINT, "content-type": "application/json"}, request_body)
    resp = requests.post(url, headers=headers, data=request_body.encode("utf-8"), timeout=30)
    print(f"HTTP {resp.status_code}: {resp.text}")
    if resp.status_code != 200:
        sys.exit(1)

if __name__ == "__main__":
    main()

DLC işlerini etikete göre filtreleyin

ListJobs API'si Tags sorgu parametresi (JSON dize biçimi) aracılığıyla etiket tabanlı filtrelemeyi destekler. Birden çok etiket için VE mantığı kullanılır; bir işin sonuçlarda görünmesi için belirtilen tüm etiketlerin eşleşmesi gerekir.

Python örnek kodu: DLC işlerini etikete göre filtreleyin

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import sys
import hashlib
import hmac
import datetime
import requests
from urllib.parse import urlencode

ACCESS_KEY_ID     = "your-AccessKeyId"
ACCESS_KEY_SECRET = "your-AccessKeySecret"
REGION_ID         = "cn-hangzhou"
WORKSPACE_ID      = "your-workspace-ID"

ENDPOINT = f"pai-dlc.{REGION_ID}.aliyuncs.com"
API_PATH = "/api/v1/jobs"

def build_query_params(workspace_id, filter_tags, page_size=50, page_number=1):
    query_params = {
        "WorkspaceId": workspace_id,
        "PageSize": str(page_size),
        "PageNumber": str(page_number),
        "SortBy": "GmtCreateTime",
        "Order": "desc",
    }

    if filter_tags:
        query_params["Tags"] = json.dumps(
            filter_tags, ensure_ascii=False, separators=(",", ":")
        )

    return query_params

def sign_request(method, path, query_string, headers, body=""):
    now = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
    headers.update({
        "x-acs-date": now,
        "x-acs-version": "2020-12-03",
        "x-acs-action": "ListJobs",
        "x-acs-signature-nonce": hashlib.md5((now + query_string + body).encode()).hexdigest(),
    })

    normalized_headers = {k.lower(): v for k, v in headers.items()}
    signed_keys = sorted(
        k for k in normalized_headers
        if k.startswith("x-acs-") or k in ("host", "content-type")
    )

    canonical_headers = "".join(f"{k}:{normalized_headers[k]}\n" for k in signed_keys)
    hashed_body = hashlib.sha256(body.encode("utf-8")).hexdigest()

    canonical_request = (
        f"{method}\n"
        f"{path}\n"
        f"{query_string}\n"
        f"{canonical_headers}\n"
        f"{';'.join(signed_keys)}\n"
        f"{hashed_body}"
    )

    string_to_sign = f"ACS3-HMAC-SHA256\n{hashlib.sha256(canonical_request.encode()).hexdigest()}"
    signature = hmac.new(
        ACCESS_KEY_SECRET.encode(),
        string_to_sign.encode(),
        hashlib.sha256
    ).hexdigest()

    headers["Authorization"] = (
        f"ACS3-HMAC-SHA256 Credential={ACCESS_KEY_ID},"
        f"SignedHeaders={';'.join(signed_keys)},"
        f"Signature={signature}"
    )
    return headers

def list_jobs_by_tags(filter_tags, page_size=50, page_number=1):
    query_params = build_query_params(WORKSPACE_ID, filter_tags, page_size, page_number)
    query_string = urlencode(sorted(query_params.items()))
    url = f"https://{ENDPOINT}{API_PATH}?{query_string}"

    headers = {
        "host": ENDPOINT,
        "content-type": "application/json",
    }
    headers = sign_request("GET", API_PATH, query_string, headers, body="")

    resp = requests.get(url, headers=headers, timeout=30)
    print(f"HTTP {resp.status_code}")
    print(resp.text)

    if resp.status_code != 200:
        sys.exit(1)

    return resp.json()

def main():
    filter_tags = {"Scene": "Training"}
    list_jobs_by_tags(filter_tags)

if __name__ == "__main__":
    main()

Etiket değişikliği geçmişini görüntüleyin

ActionTrail hizmeti etiket kurallarında yapılan tüm değişiklikleri; işlemi gerçekleştiren kullanıcıyı, zaman damgasını ve değiştirilen içeriği kaydeder.

ActionTrail konsoluna giriş yapın, Advanced query bölümüne gidin, hizmet adını PAI ve olay adını UpdateConfigs olarak ayarlayın. Ardından ConfigKey değeri predefinedTags olan kayıtları filtreleyerek etiket kuralı değişiklik geçmişini görüntüleyin.