o
    Neø  ã                   @   sX   d dl Zd dlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZdS )é    N)Úreducec                   @   ó   e Zd ZdZdd„ ZdS )ÚServerz#
        A Server basic class.
    c                 C   ó   d S ©N© ©Úselfr   r   úMD:\Projects\ConvertPro\env\Lib\site-packages\paddle/fluid/distributed/node.pyÚ__init__   ó   zServer.__init__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r
   r      ó    r   c                   @   r   )ÚWorkerz#
        A Worker basic class.
    c                 C   r   r   r   r   r   r   r
   r   !   r   zWorker.__init__Nr   r   r   r   r
   r      r   r   c                   @   ó0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚDownpourServerzÃ
        DownpourServer class is used to generate server program_desc
        Args:
            server: it is pslib.ServerParameter() 
        Examples:
            server = DownpourServer()
    c                 C   sJ   t  ¡ | _d| jjj_d| jjj_d| jjj_d| jjj_d| jjj_	d S )Nr   ZDownpourBrpcPsServerZDownpourBrpcPsClientZDownpourPsServiceé   )
ÚpslibZServerParameterÚserver_Údownpour_server_paramZservice_paramZstart_server_portZserver_classZclient_classZservice_classZserver_thread_numr   r   r   r
   r   .   s   
zDownpourServer.__init__c                 C   s¾   | j jj ¡ }||_d|_tj|_d|j	_
||j	j_d|j	j_d|j	j_|j	jj ddg¡ d|j	_d|j	_d	|j	_d
|j	j_d|j	j_d|j	j_d|j	j_d|j	j_d|j	j_d|j	j_dS )á_  
        Args:
            table_id(int): id of sparse params table
            learning_rate(float): the learning rate used to update parameters. \
                Can be a float value
            slot_key_vars(string): slot key id 
            slot_value_var(string): slot key value after embedding
        Returns:
            return None 
        ZDownpourSparseTableZDownpourFeatureValueAccessoré   g-Cëâ6?iöÿÿÿé
   é   é   é   gš™™™™™¹?é   gš™™™™™É?g333333Ã?é   g+‡ÙÎ÷ï?gš™™™™™é?N)r   r   Údownpour_table_paramÚaddÚtable_idÚtable_classr   ZPS_SPARSE_TABLEÚtypeÚaccessorÚaccessor_classZsparse_sgd_paramÚlearning_rateZinitial_g2sumZinitial_rangeZweight_boundsÚextendZ
embedx_dimZembedx_thresholdÚfea_dimZdownpour_accessor_paramZnonclk_coeffZclick_coeffZbase_thresholdZdelta_thresholdZdelta_keep_daysZshow_click_decay_rateZdelete_threshold)r	   r$   r)   Úslot_key_varsZslot_value_varÚtabler   r   r
   Úadd_sparse_table6   s&   








zDownpourServer.add_sparse_tablec                 C   s¶   | j jj ¡ }||_d|_tj|_d|j	_
d|j	j_||j	jj_d|j	jj_d|j	jj_d|j	jj_d|j	jj_d|j	jj_d	}td
d„ |ƒD ]}|tdd„ |jdƒ7 }qG||j	_dS )áf  
        Args:
            table_id(int): id of sparse params table
            learning_rate(float): the learning rate used to update parameters. \
                Can be a float value
            param_var(list): all dense param. it is a list.
            grad_var(list): all dense grad parm it is a list.
        Returns:
            return None 
        ZDownpourDenseTableZDownpourDenseValueAccessorÚadamgaSçQñÿï?g§èH.ÿï?g:Œ0âŽyE>g®Gáz®ï?g-Cëâ6*?r   c                 S   s   | j  d¡dkS ©NZ	embeddingéÿÿÿÿ)ÚnameÚfind©Úxr   r   r
   Ú<lambda>o   s    z0DownpourServer.add_dense_table.<locals>.<lambda>c                 S   s   | | S r   r   )r6   Úyr   r   r
   r7   q   s    é   N)r   r   r"   r#   r$   r%   r   ZPS_DENSE_TABLEr&   r'   r(   Zdense_sgd_paramr3   r0   r)   Zavg_decay_rateZada_decay_rateZada_epsilonZmom_decay_rateZnaiveÚfilterr   Úshaper+   )r	   r$   r)   Z	param_varZgrad_varr-   r+   Úparamr   r   r
   Úadd_dense_tableW   s$   
ÿzDownpourServer.add_dense_tablec                 C   ó   | j S )z5
        Return downpour server program_desc
        )r   r   r   r   r
   Úget_desct   ó   zDownpourServer.get_descN©r   r   r   r   r   r.   r=   r?   r   r   r   r
   r   %   s    !r   c                   @   r   )ÚDownpourWorkerzû
        DownpourWorker class is used to generate worker program_desc
        Args:
            window (int): push params frequency
            worker: it is pslib.DownpourTrainerParameter 
        Examples:
            worker = DownpourWorker(1)
    c                 C   s   || _ t ¡ | _d S r   )Úwindowr   ZDownpourTrainerParameterÚworker_)r	   rC   r   r   r
   r   …   s   zDownpourWorker.__init__c                 C   sX   | j j ¡ }||_|j dd„ |D ƒ¡ |j dd„ |D ƒ¡ |j dd„ |D ƒ¡ dS )r   c                 S   ó   g | ]}|j ‘qS r   ©r3   ©Ú.0Úvarr   r   r
   Ú
<listcomp>—   ó    z3DownpourWorker.add_sparse_table.<locals>.<listcomp>c                 S   rE   r   rF   rG   r   r   r
   rJ   ˜   rK   c                 S   s   g | ]}|j d  ‘qS )z@GRADrF   rG   r   r   r
   rJ   š   s    N)rD   Zsparse_tabler#   r$   Zslot_keyr*   Z
slot_valueZslot_gradient)r	   r$   r)   r,   Zslot_value_varsr-   r   r   r
   r.   ‰   s   ÿzDownpourWorker.add_sparse_tablec                 C   sV   | j j ¡ }||_|j tdd„ dd„ |D ƒƒ¡ |j tdd„ dd„ |D ƒƒ¡ dS )r/   c                 S   ó   |   d¡dkS r1   ©r4   r5   r   r   r
   r7   ª   ó    z0DownpourWorker.add_dense_table.<locals>.<lambda>c                 S   rE   r   rF   )rH   Úpr   r   r
   rJ   «   rK   z2DownpourWorker.add_dense_table.<locals>.<listcomp>c                 S   rL   r1   rM   r5   r   r   r
   r7   ­   rN   c                 S   rE   r   rF   )rH   Úgr   r   r
   rJ   ®   rK   N)rD   Zdense_tabler#   r$   Zdense_variable_namer*   r:   Zdense_gradient_variable_name)r	   r$   r)   Z
param_varsZ	grad_varsr-   r   r   r
   r=   œ   s   ÿÿÿÿzDownpourWorker.add_dense_tablec                 C   r>   )z5
        Return downpour worker program_desc
        )rD   r   r   r   r
   r?   °   r@   zDownpourWorker.get_descNrA   r   r   r   r
   rB   {   s    	rB   )	Zps_pb2r   Ú	functoolsr   Úobjectr   r   r   rB   r   r   r   r
   Ú<module>   s   		V