第一作者:Chen Yu(南京大学计算机软件新技术国家重点实验室)
通信作者:Zhang Sheng(南京大学计算机软件新技术国家重点实验室),Jin Yibo(南京大学计算机软件新技术国家重点实验室)
摘要:
基于众包的动态调度算法,用于优化视频分析任务中工作人员和资源配置的选择,从而提升平台的整体利润
众包平台的核心balance
- 需要提升任务完成的质量(比如视频分析,输入更高分辨率或者更高帧率)
- 降低worker上的支出成本(更高质量的任务配置需要worker花费更高的能源在计算上,消耗更多的资源会导致worker得到更多的报酬)
- 动态调整任务分配(由于worker的动态可用性,因此平台需要考虑合适的算法思考worker离开后应该如何分配任务,分配给谁)
众包平台面临的挑战
众包将手动注释,图像标记等任务分发给各种移动用户(worker)来执行,并且给worker发放奖励,奖励取决于worker执行结果的质量。但这种规划常常面临以下这些挑战:
-
不同worker的异构配置,有的worker没法配置大量任务以及计算资源。有的任务可能对输入有要求,而某些worker没法满足输入的要求
既然考虑到了异构的配置,那么这里就顺便提一下众包任务分发策略的两种,一种是用户选择任务模式,这种情况下平台不需要制定任务分发策略,用户自由度很高,但可能会出现任务滞留的情况,另一种则是平台分发任务模式,平台需要定制任务分发策略来自动发送给用户,这种情况下用户和任务的匹配更加精准,但自由度较低,运营成本稍高。
-
worker的动态可用性实时发生变化,需要对应的动态调整分配策略,分配策略需要考虑worker不确定消耗的资源,并且由于worker动态的可用性,使用历史数据来进行预测可能会降低准确度。
-
激励策略的制定,出于公平性,实时性和效率的原因,激励策略需要在平台上线前确立并且确保适当的合理性,但动态的网络环境和不同的设备运行状态与环境都会导致worker消耗资源难以估计,进而使得平台难以根据worker的成本来合理设置报酬。
图为计算传输的能耗波动图,但我认为用户计算任务的时间会比较长(可能至少1min?)总之应该不是按几秒来算的,图中尤其是传输产生的能耗可以发现其均值较为稳定,所以worker执行任务的时间都是几秒几秒的吗,如果不是那有必要考虑这些吗
现有的方法要么没有考虑动态可用性,要么缺少任务配置与利润的联合优化,要么缺少配置和worker的联合优化
问题设置
时间
将众包系统按时槽(Time Slot)进行划分并记为$\mathcal{T}={1,...,T}$,并且每个Slot划分为多个阶段(Epoch)$\mathcal{J}^t$ 在每个时槽$t$的阶段$j$中可用的worker被记为 $\mathcal{N}_j^t$
任务划分
在每个时槽都有需要完成的任务集合,记为$\mathcal{M}^t={s_1^t,s_2^t,...,s^t_{M_t}}$,共$M_t$
由于视频分析的任务通常比较大,因此作者将任务分为多个子任务以匹配移动设备的运行环境。每个任务$s^t_m$划分的子任务集合记为 $\mathcal{K_m^t={s_{m,k}^t|k=1,2,...,K_m^t}}$,共$K_m^t$(子任务是平台划分的吗?)
worker任务分配
每个worker假定只配一个CNN model,在worker被选定的时候会同时确定该worker上(所有)CNN的输入分辨率 $r_i$,假设所有待分析视频的原本分辨率都很大,则$r_i$是经过下采样以适配worker运行环境后的分辨率。子任务$x^t_{m,k}$是否分配给worker $n$记为$x^t_{m,k,n}$,并且子任务选择的帧率为 $f_{m,k}^t$。
任务完成精度
针对任务的完成精度,作者通过先前的研究和自己的实验发现,精度与分辨率和帧率的关系可以被建模为凹函数(Concave Function),并且分辨率和帧率对于精度的影响是独立的,因此针对$t$ slot $j$ epoch 的子任务$s_{m,k}^t$,其任务完成得精度可以按照如下公式计算
$$
a_{m,k}^t=\epsilon_m^t(\sum_{n=1}^{|\mathcal{N_j^t}|}x_{m,k,n}^tr_n)\phi_m^t(f_{m,k}^t)
$$
这里$\epsilon_m^t(resolution)$和$\phi_m^t(frame\ rate)$就分别是分辨率和帧率对应的凹函数,将worker的分辨率求和并应用$\epsilon_m^t$凹函数,后由于帧率和分辨率是单独影响,所以这里直接让帧率应用$\phi_m^t$凹函数后相乘*(这里有一个疑问就是,给某个子任务分配的worker越多,带入到凹函数$\epsilon_m^t$中的数值就会越大,是不是应该先将分配的worker的分辨率先求和呢)*
因此可以简单求和取平均计算得到所有任务的整体平均准确率
$$
a^t=\frac{\sum_{m=1}^{M^t}\sum_{k=1}^{K_m^t}a^t_{m,k}}{|M^t||K_m^t|}
$$
worker能量消耗
worker消耗的能耗前文主要讲了有传输能耗和计算能耗
-
传输能耗是worker从众包平台下载视频所消耗的能量,这部分的大小和视频大小成正比,对于分辨率为$r$的视频的每一帧的大小可以定义为$\alpha r^2$,$\alpha$是常量,因此定义$t$时槽下载视频消耗的能耗为
$$
e_n^{d,t}=\sum_{m=1}^{M^t}\sum_{k=1}^{K_m^t}\gamma_{m,n}^t\alpha(x_{m,k,n}^tr_n)^2f^t_{m,k}
$$
公式中对于某个worker的所有子任务上的消耗计算公式中,每个子任务每帧的大小都是相同的,即$\alpha (x_{m,k,n}^tr_n)^2$,再乘子任务对应的帧率$f_{m,k}^t$得到每秒的数据量,*这里是假设每个slot都是对应的1s长度是吗?*最后再乘用于对某视频的传输消耗系数$\gamma_{m,n}^t$计算得到每时槽$t$某用户$n$对于所有分配到其的子任务所产生的传输消耗和。也就是说worker可以在某个时槽接收多个子任务,每个子任务对应一个CNN,一共执行多个CNN -
计算能耗是worker本地处理视频帧消耗的能量,将worker $n$在slot $t$时槽处理视频任务$m$的一帧所消耗的能量记为$\mu_{m,n}^t$,则可以定义worker $n$在slot $t$时计算产生的总能耗为
$$
e_n^{c,t}=\sum_{m=1}^{M^t}\sum_{k=1}^{K^t_m}\mu_{m,n}^tx_{m,k,n}^tf_{m,k}^t
$$
也就是对所有分配到worker的子任务的帧率$f_{m,k}^t$和消耗能量$\mu _{m,n}^t$的求和
所以总能耗$e_n^t$就是计算能耗$e_n^{c,t}$和传输能耗$e_n^{d,t}$之和,且公式里的bit传输消耗系数$\gamma_{m,n}^t$和每帧计算消耗系数$\mu_{m,n}^t$是随机的*(随机的?)*
众包利润
用凹函数(Concave Function)$G_m^t(a)$来建模收入函数*(为什么是凹函数)*,这里$a$就是任务$s_m^t$的完成精度。所以在时槽t内获取的来自任务发布者的奖励公式为:
$$
I^t=\sum_{m=1}^{M^t}\sum_{k=1}^{K_m^t}G_m^t(a_{m,k}^t).
$$
也就是所有子任务精度带入凹函数中求和的结果
在移动众包中,worker获得的酬劳主要取决于其能源消耗,设$\omega_n$是worker n定价的单位能量消耗的费用,则时槽$t$内众包平台支出的总费用为:
$$
O^t=\sum_{j=1}^{|\mathcal{J^t}|}\sum_{n=1}^{|\mathcal{N_j^t}|}\omega_ne_n^t
$$
也就是worker $n$ 在时槽$t$上的总能耗,然后对worker $n$和时槽t的所有epoch求和*(这里需要注意epoch在之前计算中都是怎么被考虑的)*。最后,平台的利润就是简单的:
$$
U^t = I^t - O^t
$$
问题建模
$$
\mathbb{P}1\ \ :\underset{x,f}{max}\ \underset{T\to+\infin}{lim}\ \frac{1}{T}\sum{t=0}^TU^t \
\texttt{最大化无限时间长度上的平均利润,可控变量为分配变量x和选择给每个子任务的帧率}\
s.t.\ \ x_{m,k,n}^t={0,1},\ \forall t,m,k,n \
\texttt{分配变量x是bool变量} \
\sum_{j=1}^{|\mathcal{J}^t|}\sum_{n=1}^{|\mathcal{N}j^t|}x{m,k,n}^t=1,\ \forall t,m,k \
\texttt{时槽t epoch j的每个子任务只分配给一个worker} \
1\le f_{m,k}^t \le F_m^t, \forall t,m,k \
\texttt{众包平台选择的帧率必须小于视频的原始帧率} \
\underset{T\to +\infin}{lim}\ \frac{1}{T}\sum_{t=0}^T a^t \ge A^{min}. \
\texttt{所有任务整体平均准确率长期来看需要稳定在某阈值之上} \
$$
由于需要保证长期准确率高于阈值,则需要分析不同时槽$t$的worker选择$x$和帧率选择$f$(也很难根据经验预测),因此:
- 使用李雅普诺夫优化将时间平均问题转化为了一系列每个时槽的子问题
- 采用多臂赌博机来解子问题时仍然保持李雅普诺夫对于子问题的约束
李雅普诺夫优化
为什么采用
李亚普诺夫优化的关键优势之一是能够在每个时间周期做出决策,而不需要全局信息或对整个问题进行精确求解。这对于解决具有复杂约束的动态优化问题非常有用。通过这种方法,系统能够在不需要大量计算和全局信息的情况下,基于当前状态做出实时的近似最优决策。
队列积压函数
定义虚拟精度亏损队列,队列初始积压$q(0) = 0$,$q(t)$代表在时槽$t$偏离目标精度的程度,积压函数变化公式:
$$
q(t+1)=[q(t)+A^{min}-a^t]^+ \
[·]^+代表max(·,0),因此还可以得到 \
q(t+1) \le q(t) + A^{min} - a^t \
A^{min}是设定需要长期保证的准确率,a^t是当前时槽达到的平均准确率 \
$$
,如果为了追求利润,平台大大降低worker的消耗,就会导致任务完成精度很低,精度损失很大,导致队列积压$q(t)$增大。为了约束长期不偏离目标精度,定义二次李亚普诺夫函数
$$
L(q(t))=\frac{1}{2}(q(t))^2
$$
,代表队列积压程度。为了保持队列的稳定性,需要不断将$L(q(t))$的值压低。
李亚普诺夫漂移
定义单时槽$t$的李雅普诺夫漂移(Drift):
$$
\begin{aligned}
\Delta(q(t)) &= \mathbb{E}[L(q(t+1))-L(q(t))|q(t)] \
&\le \frac{1}{2}\mathbb{E}[(q(t)+A^{min}-a^t)^2-q^2(t)|q(t)]\
&(带入积压函数变化公式) \
&= \frac{1}{2}(A^{min}-a^t)^2+q(t)\mathbb{E}[(A^{min}-a^t)|q(t)] \
&(展开得到) \
&\le B+q(t)\mathbb{E}[(A^{min}-a^t)|q(t)], \
&更换常数
\end{aligned}
$$
B的定义为$B = \frac{1}{2}(A^{min}-a^{min})^2$,是常数,$a^{min}$代表所有时槽的平均精度中最低的那个*(历史经验数据吗)*。
将李雅普诺夫漂移加入到众包利润的优化函数中,定义带惩罚项的优化目标为
$$
\Delta(q(t))-V·\mathbb{E}[U^t|q(t)],
$$
这里的$V$是正参数,用来调节分析精度的提升和众包利润之间的balance,在论文中有具体证明$V$的线性变化会引起队列积压量的线性变化。
将$\Delta(q(t))$展开得到
$$
\Delta(q(t))-V·\mathbb{E}[U^t|q(t)] \le \
B+q(t)\mathbb{E}[A^{min}-a^t|q(t)]-V·\mathbb{E}[U^t|q(t)]
$$
与其直接最小化带惩罚项的优化目标,我们选择最小化这个优化目标的上界,也就是:
$$
\mathbb{P}2:\underset{x,f}{max}\ \ q(t)·a^t+V·U^t \
s.t.还是前文中的s.t.但不包括最后的长期准确度平均需要大于A^{min} \
因为准确度的要求已经被加入到了优化目标中 \
当积压量q(t)较大时,则需要更加注意对于平均准确率a^t的优化 \
$$
现在对于新问题的求解就只需要当前状态的输入就可以了。将$\mathbb{P}2$展开有:
$$
\mathbb{P}2:\underset{x,f}{max}\sum{m=1}^{M^t}\sum{k=1}^{K_m^t}H^t(m,k)\
=\sum{m=1}^{M^t}\sum_{k=1}^{K_m^t}\left{ \frac{q(t)a_{m,k}^t}{|M^t||K^t_m|}+V[G_m^t(a_{m,k}^t)-\sum_{j=1}^{|\mathcal{J}^t|}\sum_{n=1}^{|\mathcal{N}j^t|}C{m,k,n}]\right}, \
左边将a^t展开为了所有子任务的求和平均\
右边将U^t展开为了任务精度报酬-支付工资\
$$
其中$C_{m,k,n}$可以继续展开为
$$
C_{m,k,n}=\omega_n(\mu_{m,n}^tx_{m,k,n}^tf_{m,k}^t+\gamma_{m,n}^t\alpha(x_{m,k,n}^t r_n)^2f_{m,k}^t)
$$
当worker的选择$x$固定后,可以独立地对每个子任务设置使用的帧率$f_{m,k}^t$,使得每个子任务的最大的$H^t(m,k)$相加得到目标函数整体的最大值。如何求解呢,在固定worker的选择后,定义集合
$$
\mathcal{F}{m,k}^t={f{m,k}^t|\partial H^t(m,k)/\partial f_{m,k}^t=0},
$$
也就是最优解的帧率集合,解得
$$
f_{m,k}^t=\underset{f_{m,k}^t\in \mathcal{F}^t_{m,k}∪{1,F_m^t}}{arg\ max}H^t(m,k)
$$
在确定worker的分配以后,$\mathbb{P}2$就可以对每个子任务单独计算了,我们假定$H^t(m,k)$的值为$z{m,k}^t$,展开$H^t(m,k)$中的$a^t$得到类似回报函数的表达式
$$
z_{m,k}^t(n,f_{m,f}^t)=\frac{q(t)\epsilon_m^t(r_n)\phi_m^t(f_{m,k}^t)}{|M^t||K_m^t|}+V[G_m^t(a_{m,k}^t)-\omega_n(\mu_{m,n}^tf_{m,k}^t+C_n^d\gamma_{m,n}^t\alpha(r_n)^2f_{m,k}^t)] \
由于每个子任务只会分配给某一个worker\
所以a^t的展开式中的r_n求和项就变成对应worker的r_n了
$$
由于$z_{m,k}^t(n,f_{m,f}^t)$的值依赖于$\mu_{m,n}^t$和$\gamma_{m,n}^t$,因此采用多臂赌博机算法
多臂赌博机
为什么采用
多臂赌博机(Multi-Armed Bandit, MAB)方法是一种用于在不确定环境中进行决策的经典算法框架,特别适合处理探索和利用之间的权衡问题。由于两个随机变量$\mu_{m,n}^t$和$\gamma_{m,n}^t$是随机的或动态变化的,因此需要通过一种机制来动态学习这些值,多臂赌博机的核心目标正是通过不断尝试不同的探索,并在获得反馈后调整选择策略,从而在不确定性条件下找到最优解。
-
无需假设随机变量$\mu_{m,n}^t$和$\gamma_{m,n}^t$的具体分布,只需通过采样更新即可逐步改进策略。
算法流程
-
输入任务帧率限制$F_m^t$,最小精度$A^{min}$,能耗定价$\omega_n$,准确率回报函数$G_m^t$
-
从未完成的子任务集合$\mathcal{L}m^t$中选择一个子任务$s{m,k}^t$,表示即将对该任务进行分配
-
对worker状态进行检查,如果存在新的worker $\bar n$,则直接将任务分发给$\bar n$并且将观察到的$\bar n$的传输能耗随机变量和计算能耗随机变量 $\widetilde\mu_{m,\bar n}^t$和 $\widetilde\gamma_{m,\bar n}^t$赋值给$\bar n$的 $\bar \mu_{m,\bar n}^t$和 $\bar \gamma_{m,\bar n}^t$,同时将该worker已完成任务数 $\theta_{m,\bar n}^t$设为1(也就是老虎机被玩的次数)并且更新所有已完成的任务数(也就是全局玩老虎机的次数)
-
如果所有worker都已经有随机变量的记录了,则计算让$z_{m,k}^t$最大化的$\bar n$和$\bar f$。
由于之前提到了优化目标已经是最大化$z_{m,k}^t$,因此这里可以将$z_{m,n}^t$视作reward。这里还需要加上置信度上界,也就是式子中的$\sqrt{\frac{2\ ln\ \mu^t_{m,n}}{\theta_{m,n}^t}}$。它是对不确定性的度量,当某个worker选择的次数越多,那么它的$\theta_{m,n}^t$就会越大,使得不确定性减小;同样的,当其他worker不断被选择,那么式中的$\mu_{m,n}^t$就会越大,使得不确定性增大。自然对数是对于时间推移的模拟,也就是随着时间增大,对不确定性的影响将会越来越小。因此,具有较低reward的worker和已经被选择了更多次的worker就会更不容易被选中。
将子任务分配给选出的worker $\bar n$,并且得到那个子任务下worker $\bar n$的传输能耗和计算能耗的随机变量 $\widetilde\mu_{m,\bar n}^t$和 $\bar \gamma_{m,\bar n}^t$,随后按照比例对worker 的$\bar \mu_{m,\bar n}^t$和 $\bar \gamma_{m,\bar n}^t$进行更新,比例如下:
$$
\bar \mu_{m,\bar n}^t \leftarrow \frac{\bar \mu_{m,\bar n}^t\theta_{m,\bar n}^t+\widetilde \mu_{m,\bar n}^t}{\theta_{m,\bar n}^t+1} \
\bar \gamma_{m,\bar n}^t \leftarrow \frac{\bar \gamma_{m,\bar n}^t\theta_{m,\bar n}^t+\widetilde \gamma_{m,\bar n}^t}{\theta_{m,\bar n}^t+1} \
$$
最后更新该worker被选择的次数 $\theta_{m,\bar n}^t \leftarrow \theta_{m,\bar n}^t +1$ -
输出子任务$s_{m,k}^t$的选择策略以及对应的reward $z_{m,k}^t(\bar \mu_{m,\bar n}^t,\bar \gamma_{m,\bar n}^t)$。
实验部分
实验设置
数据集来自AI City Datasets 2019的视频,使用YOLOv3进行视频分析并且与其他算法进行对比,输入帧的大小包括360p,540p,720p,840p,960p,1080p,原始帧率30fps
worker的可用性模拟来自于Users Active Time Prediction数据集,并且将worker的计算能耗设定为 $N(5,0.5)$ 焦耳每帧, 传输能耗设定为 $N(5,0.5) \times 10^{-6}$ 焦耳,并且设置 $\alpha = 1$,$\omega_n ∼ U\ (0,1)$。
作者将自己的算法和4种备选方案进行对比,分别是:
- 利润优先:忽视众包平台承诺的准确率约束,只单纯追求最大利润
- 精度优先:忽视众包平台的利润,只追求每个时间槽的最大准确率
- 探索优先:在多臂赌博机中仍然会学习能量消耗率,但系数的设置会让多臂赌博机更倾向于策略空间的探索策略
- 利用优先:在多臂赌博机中仍然会学习能量消耗率,但系数的设置会让多臂赌博机更倾向于当前保守的探索策略
- 文中的策略(LOL)
- 传统赌博机模型(LOL-M)
实验结果
动态调整的帧率和分辨率
在测试样例中一共包含两个视频分析任务,他们的前20时槽和后20时槽的分析目标大小不同,因此需要采用变化的分辨率,并且前后目标运动的速度也不一样,因此帧率也需要进行动态的调整。(大目标采用低分辨率,慢运动速度采用低帧率)
参数影响
图$a$展示的是$V$(精度和利润balance中对于利润的重视程度)对于队列积压平衡的影响,可以看到$V$越大,就越需要更大的时间进行平衡,$V$减小,则会更加注意完成的准确性,使得队列更容易趋于稳定。
图$b$展示的是$A^{min}$(众包平台承诺的准确度标准)对于队列积压平衡的影响,可以看到$A^{min}$较高时,就更容易造成队列积压,因此最终收敛值就很大,$A^{min}$较小时,则容易满足精度约束从而造成更少的积压,因此最终收敛值就很小。
图$c,d$展示的是在不同worker数目和子任务数目下LOL与其他两种对比算法的利润和精确度区别。可以发现LOL表现类似于两种版本的平均体,并且相比于利润优先的版本,LOL基本可以保证精度领先的情况下获取到相同的利润。
子任务选择上的性能对比
图$a$展示了worker不同的variance(也就是计算能耗和传输能耗分布的方差值)下选择到次优(非最优)worker的概率(模型对于每个worker都已经执行过了一次子任务后)。可以发现当方差为0时,赌博机学习到的是精准的能耗随机变量,因此总是能够选出最优的worker,方差非0时选择次优worker的概率也会随着LOL的学习次数急剧下降。
图$b,c$展示了不同worker和子任务数目,给子任务选择worker来获取更高的Goal Value的场景下,相比于探索优先和保守策略,LOL都有巨大的优势(平均提升68%)。
和原始赌博机算法的对比
这里引入了worker可用性的变动,在15,30 Epoch 的时候最优worker会离开,并且加入新的最优worker。由于原始的赌博机算法在出现worker(也就是赌博机)变动的时候会重启,而作者的赌博机保留了worker对于随机变量和完成任务的记录,因此LOL相比LOL-M很快就能找到最优的工人并且得到更高的目标函数值。
作者工作
整个问题属于非线性整数规划,考虑了视频的资源质量权衡和工人的动态可用性,将长期时间对精度的约束使用李雅普诺夫优化方法转化为子任务最优化问题,并且使用波动多臂老虎机来学习预测资源使用的随机性,根据worker的动态可用性和配置以最小资源消耗将任务进行分配,实现平台长期的利润最大化。