dp_vs调度(一):dp_vs_scheduler

  • dp_vs_scheduler

    struct dp_vs_scheduler {
    		//用于将已注册的scheduler都挂接在全局dp_vs_schedulers链表中
        struct list_head    n_list;
    		//调度算法名称
        char                *name;
    //    rte_atomic32_t      refcnt;
    		//以下为虚函数表
        struct dp_vs_dest *
            (*schedule)(struct dp_vs_service *svc,
                        const struct rte_mbuf *mbuf);
    
        int (*init_service)(struct dp_vs_service *svc);
        int (*exit_service)(struct dp_vs_service *svc);
        int (*update_service)(struct dp_vs_service *svc, struct dp_vs_dest *dest,
                sockoptid_t opt);
    } __rte_cache_aligned;
    
  • dp_vs_sched_init

    • 初始化不同的scheduler算法,包括rr,wrr,wlc,conhash,fo
    /*
     *  IPVS scheduler list
     * 保存所有已注册scheduler的全局双向链表
     */
    static struct list_head dp_vs_schedulers;
    
    /* lock for service table */
    static rte_rwlock_t __dp_vs_sched_lock;
    int dp_vs_sched_init(void)
    {
        INIT_LIST_HEAD(&dp_vs_schedulers);
        rte_rwlock_init(&__dp_vs_sched_lock);
        dp_vs_rr_init();
        dp_vs_wrr_init();
        dp_vs_wlc_init();
        dp_vs_conhash_init();
        dp_vs_fo_init();
    
        return EDPVS_OK;
    }
    
  • 注册

    /*
     *  Register a scheduler in the scheduler list
     */
    int register_dp_vs_scheduler(struct dp_vs_scheduler *scheduler)
    {
        struct dp_vs_scheduler *sched;
    
        if (!scheduler) {
            return EDPVS_INVAL;
        }
    
        if (!scheduler->name) {
            return EDPVS_INVAL;
        }
    
        rte_rwlock_write_lock(&__dp_vs_sched_lock);
    
        if (!list_empty(&scheduler->n_list)) {
            rte_rwlock_write_unlock(&__dp_vs_sched_lock);
            return EDPVS_EXIST;
        }
    
        /*
         *  Make sure that the scheduler with this name doesn't exist
         *  in the scheduler list.
         */
        list_for_each_entry(sched, &dp_vs_schedulers, n_list) {
            if (strcmp(scheduler->name, sched->name) == 0) {
                rte_rwlock_write_unlock(&__dp_vs_sched_lock);
                return EDPVS_EXIST;
            }
        }
        /*
         *      Add it into the d-linked scheduler list
         */
        list_add(&scheduler->n_list, &dp_vs_schedulers);
        rte_rwlock_write_unlock(&__dp_vs_sched_lock);
    
        return EDPVS_OK;
    }
    
  • 注销

    /*
     *  Unregister a scheduler from the scheduler list
     */
    int unregister_dp_vs_scheduler(struct dp_vs_scheduler *scheduler)
    {
        if (!scheduler) {
            return EDPVS_INVAL;
        }
    
        rte_rwlock_write_lock(&__dp_vs_sched_lock);
        if (list_empty(&scheduler->n_list)) {
            rte_rwlock_write_unlock(&__dp_vs_sched_lock);
            return EDPVS_NOTEXIST;
        }
    
        /*
         *      Remove it from the d-linked scheduler list
         */
        list_del(&scheduler->n_list);
        rte_rwlock_write_unlock(&__dp_vs_sched_lock);
    
        return EDPVS_OK;
    }
    
  • service与scheduler绑定

    /*
     *  Bind a service with a scheduler
     */
    int dp_vs_bind_scheduler(struct dp_vs_service *svc,
                             struct dp_vs_scheduler *scheduler)
    {
        int ret;
    
        if (svc == NULL) {
            return EDPVS_INVAL;
        }
        if (scheduler == NULL) {
            return EDPVS_INVAL;
        }
    
        svc->scheduler = scheduler;
    
        if (scheduler->init_service) {
            ret = scheduler->init_service(svc);
            if (ret) {
                return ret;
            }
        }
    
        return EDPVS_OK;
    }
    
  • service与scheduler解绑

    /*
     *  Unbind a service with its scheduler
     */
    int dp_vs_unbind_scheduler(struct dp_vs_service *svc)
    {
        struct dp_vs_scheduler *sched;
    
        if (svc == NULL) {
            return EDPVS_INVAL;;
        }
    
        sched = svc->scheduler;
        if (sched == NULL) {
            return EDPVS_INVAL;
        }
    
        if (sched->exit_service) {
            if (sched->exit_service(svc) != 0) {
                return EDPVS_INVAL;
            }
        }
    
        svc->scheduler = NULL;
        return EDPVS_OK;
    }
    
这段代码是一个模型训练的配置文件。以下是对配置文件中各参数的解释: - `setup: end2end`:采用端到端(end-to-end)的训练方式。 - `Model backbone: resnet18`:使用ResNet-18作为模型的主干网络。 - `model_kwargs`:模型的额外参数设置。 - `head: mlp`:使用多层感知机(MLP)作为模型的头部。 - `features_dim: 128`:模型的特征维度为128。 - `nheads: 1`:模型的头数为1。 - `nclusters: 10`:模型的聚类数为10。 - `Dataset`:数据集相关的参数设置。 - `train_db_name: cifar-10`:训练集的数据库名称为CIFAR-10。 - `val_db_name: cifar-10`:验证集的数据库名称为CIFAR-10。 - `num_classes: 10`:数据集的类别数为10。 - `num_neighbors: 5`:每个样本的最近邻数为5。 - `Loss`:损失函数相关的参数设置。 - `criterion: end2end`:采用端到端(end-to-end)的损失函数。 - `criterion_kwargs`:损失函数的额外参数设置。 - `temperature: 0.1`:温度参数为0.1。 - `entropy_weight: 2.0`:熵权重为2.0。 - `Hyperparameters`:超参数设置。 - `epochs: 1000`:训练的总轮数为1000。 - `optimizer: sgd`:优化器采用随机梯度下降(SGD)。 - `optimizer_kwargs`:优化器的额外参数设置。 - `nesterov: False`:不使用Nesterov加速。 - `weight_decay: 0.0001`:权重衰减系数为0.0001。 - `momentum: 0.9`:动量因子为0.9。 - `lr: 0.4`:学习率为0.4。 - `scheduler: cosine`:学习率调度器采用余弦退火调度。 - `scheduler_kwargs`:学习率调度器的额外参数设置。 - `lr_decay_rate: 0.1`:学习率衰减率为0.1。 - `batch_size: 256`:批次大小为256。 - `num_workers: 8`:数据加载的线程数为8。 - `Transformations`:数据增强相关的参数设置。 - `augmentation_strategy: simclr`:采用SimCLR的数据增强策略。 - `augmentation_kwargs`:数据增强的额外参数设置。 - `random_resized_crop`:随机裁剪并调整尺寸。 - `size: 32`:裁剪后的尺寸为32。 - `scale: [0.2, 1.0]`:裁剪的尺度范围为0.2到1.0。 - `color_jitter_random_apply`:随机应用颜色抖动。 - `p: 0.8`:颜色抖动的概率为0.8。 - `color_jitter`:颜色抖动的参数设置。 - `brightness: 0.4`:亮度抖动的幅度为0.4。 - `contrast: 0.4`:对比度抖动的幅度为0.4。 - `saturation: 0.4`:饱和度抖动的幅度为0.4。 - `hue: 0.1`:色调抖动的幅度为0.1。 - `random_grayscale`:随机将图像转为灰度图的概率为0.2。 - `normalize`:图像的归一化参数设置。 - `mean: [0.4914, 0.4822, 0.4465]`:图像的均值。 - `std: [0.2023, 0.1994, 0.2010]`:图像的标准差。 - `transformation_kwargs`:数据转换的参数设置。 - `resize: 40`:将图像调整为40x40。 - `crop_size: 32`:将图像裁剪为32x32。 - `normalize`:归一化的参数设置,与上述`augmentation_kwargs`中的一致。 这些参数定义了模型训练过程中的各种设置,包括模型架构、数据集处理、损失函数、优化器、学习率调度器和数据增强等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值