wandb: получить список всех коллекций артефактов и всех псевдонимов этих артефактов
Документация wandb, похоже, не объясняет, как это сделать, но я могу представить, что это должен быть довольно распространенный вариант использования?
Я добился в основном (но не полностью) того, чего хотел, вот так, но это кажется немного неуклюжим? Я ожидал получить
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
Думаю, я мог бы при необходимости написать собственный запрос graph-ql или просто использовать этот неуклюжий метод.
Я что-то упускаю? Есть ли более чистый способ сделать это?
Единственное, чего не хватает в этом неуклюжем методе, - это старые псевдонимы - он показывает только последнюю модель, а затем любые ее псевдонимы (скажем, «последняя», а также «v4» и т. Д.) - не уверен, как это будет / должно отображаться, но Я бы надеялся получить и старые псевдонимы (т.е. псевдонимы, указывающие на старые версии артефакта). Хотя это менее важно.
1 ответ
Я Аннируд. Я инженер в W&B, помогавший создавать артефакты. Ваше решение действительно близко, но с помощью
latest
псевдоним при получении артефакта мы будем рассматривать только псевдонимы из этого артефакта, а не всех его версий. Вы можете обойти это, перебирая версии:
api = wandb.Api()
collections = [
coll for coll in api.artifact_type(type_name=TYPE, project=PROJECT).collections()
]
aliases = set()
for coll in collections:
for artifact in coll.versions():
aliases.update(artifact.aliases)
print(collections)
print(aliases)
В настоящее время в документации мало коллекций, но мы дорабатываем их в общедоступном API и вскоре выпустим некоторые документы по этому поводу. Эти API еще не совсем готовы к выпуску - так что извиняемся за неровности.
Не стесняйтесь обращаться ко мне напрямую в будущем, если у вас возникнут другие вопросы относительно артефактов. Всегда рады помочь.