wandb 文档似乎没有解释如何做到这一点 - 但它应该是我想象的一个相当常见的用例?
我像这样实现了大部分(但不是完全)我想要的,但看起来有点笨拙?self.aliases我本来期望在这些实例上拥有财产ArtifactCollection吗?
更新:它似乎确实是> = v0.13.10的sdk的一部分: https://github.com/wandb/wandb/blob/v0.13.10/wandb/apis/public.py#L4050-L4053
ENTITY = os.environ.get("WANDB_ENTITY")
API_KEY = os.environ.get("WANDB_API_KEY")
def get_model_artifacts(key=None):
wandb.login(key=key if key is not None else API_KEY)
api = wandb.Api(overrides={"entity": ENTITY})
model_names = [
i
for i in api.artifact_type(
type_name="models", project="train"
).collections()
]
for model in model_names:
artifact = api.artifact("train/" + model.name + ":latest")
model._attrs.update(artifact._attrs)
model._attrs["metadata"] = json.loads(model._attrs["metadata"])
model.aliases = [x["alias"] for x in model._attrs["aliases"]]
return model_names
Run Code Online (Sandbox Code Playgroud)
我想如果需要的话我可能会考虑编写一个自定义的 graph-ql 查询,或者只是使用这种笨重的方法。
我错过了什么吗?有没有更干净的方法来做到这一点?
这个笨重的方法缺少的一件事是任何旧的别名 - 它只显示最新的模型,然后显示该模型的任何别名(比如说“最新”和“v4”等) - 不确定这将/应该如何显示,但是我希望也能够获得旧的别名(即指向旧版本工件的别名)。虽然,这不太重要。
编辑- …