Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
MEMORY SIDE ACCELERATION FOR DEEP LEARNING PARAMETER UPDATES
Document Type and Number:
WIPO Patent Application WO/2018/140885
Kind Code:
A1
Abstract:
Examples disclosed herein relate to using a memory side accelerator to calculate updated deep learning parameters. A globally addressable memory includes deep learning parameters. The deep learning parameters are partitioned, where each partition is associated with a memory side accelerator. A memory side accelerator is to receive calculated gradient updates associated with its partition and calculate an update to the deep learning parameters associated with the partition.

Inventors:
XU CONG (US)
CAI QIONG (US)
Application Number:
PCT/US2018/015753
Publication Date:
August 02, 2018
Filing Date:
January 29, 2018
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HEWLETT PACKARD ENTPR DEV LP (US)
International Classes:
G06F9/22; G06N3/08; G06N3/04
Domestic Patent References:
WO2015154216A12015-10-15
WO2017003888A12017-01-05
Foreign References:
US20160232445A12016-08-11
US20150193695A12015-07-09
US9031844B22015-05-12
Attorney, Agent or Firm:
CHANG, Marcia R. et al. (US)
Download PDF:
Claims:
CLAIMS

What is claimed is:

1 . A computing system comprising:

a plurality of processing nodes;

a globally addressable memory that is addressable by each of the processing nodes;

a plurality of memory side accelerators each associated with a portion of the globally addressable memory,

wherein each memory side accelerator includes a scratchpad memory;

a plurality of deep learning parameters stored in the globally addressable memory,

wherein each memory side accelerator is associated with a partition of the deep learning parameters;

a plurality of deep learning worker threads executing on the respective processing nodes to each calculate gradient updates based on corresponding subsets of training information,

wherein each memory side accelerator is to receive a plurality of the calculated gradient updates associated with the respective partition and calculate updated deep learning parameters for the respective partition using the corresponding scratchpad memory.

2. The computing system of claim 1 , wherein each memory side accelerator is further to update a copy of the respective partition of the deep learning parameters in the scratchpad memory according to the received calculated gradient updates associated with the respective partition.

3. The computing system of claim 2, wherein the respective memory side accelerator is further to update the corresponding partition of the deep learning parameters in the globally addressable memory based on the respective updated copy in the respective scratchpad memory based on a condition.

4. The computing system of claim 3, wherein the condition is based on reception of calculated gradient updates associated with the partition from each of the subsets.

5. The computing system of claim 3, wherein the condition includes a timer reaching a preset value after a first one of the calculated gradient updates is received by the respective memory side accelerator.

6. The computing system of claim 3, further comprising a ready counter in the globally addressable memory that is incremented when each partition of the deep learning parameters in the globally addressable memory is updated.

7. The computing system of claim 1 , wherein the globally addressable memory is non-volatile.

8. The computing system of claim 7, wherein the subset of training information for one of the deep learning worker threads is included in a volatile memory local to one of the processing nodes corresponding to the one deep learning worker thread.

9. The computing system of claim 1 , wherein deep learning parameters are included in a tensor of floating point numbers and each partition includes a subset of the tensor.

10. A method comprising:

storing a plurality of deep learning parameters in a globally addressable memory that is addressable by each of a plurality of processing nodes, wherein the globally addressable memory includes a plurality of portions, wherein each of the portions are coupled to a memory controller that includes a memory side accelerator,

wherein each of the memory side accelerators is associated with a partition of the deep learning parameters, and

wherein the deep learning parameters are included in a tensor of floating point numbers and each partition includes a subset of the tensor; calculating gradient updates at deep learning worker threads based on corresponding subsets of training information at respective processing nodes;

receiving, at each memory side accelerator, a plurality of the calculated gradient updates associated with the respective partition; and calculating, at each memory side accelerator, an updated deep learning parameter for the respective partition.

1 1 . The method of claim 10, further comprising:

updating, by each memory side accelerator, a copy of the respective partition of the deep learning parameters in a scratchpad memory associated with the corresponding memory side accelerator, according to the received calculated gradient updates associated with the respective partition; and

updating, by each memory side accelerator, the corresponding partition of the deep learning parameters in the globally addressable memory based on the respective updated copy in the respective scratchpad memory based on a condition.

12. The method of claim 1 1 , wherein the condition includes reception of calculated gradient updates associated with the partition from each of the subsets of the training information.

13. The method of claim 1 1 , wherein the condition includes a timer reaching a preset value after a first one of the calculated gradient updates is received by the respective memory side accelerator.

14. The method of claim 1 1 , further comprising:

incrementing a ready counter in the globally addressable memory when each partition of the deep learning parameters in the globally addressable memory is updated.

15. The method of claim 10,

wherein the globally addressable memory is non-volatile, and wherein the subset of training information for one of the deep learning worker threads is included in a volatile memory local to one of the processing nodes corresponding to the one deep learning worker thread.

16. A non-transitory machine-readable storage medium storing instructions that, if executed by a physical processing element of a first memory side accelerator of a computing system, cause the first memory side accelerator to:

retrieve a partition of a plurality of deep learning parameters stored in a globally addressable memory that is addressable by each of a plurality of processing nodes of the computing system,

wherein the globally addressable memory includes a plurality of portions each respectively coupled to at least one of a plurality of memory side accelerators, including the first memory side accelerator;

wherein each of the memory side accelerators is associated with a partition of the deep learning parameters, and

wherein the deep learning parameters are included in a tensor of floating point numbers and each partition includes a subset of the tensor;

receive a plurality of gradient updates associated with a first partition that corresponds to the first memory side accelerator from a plurality of deep learning worker threads; and

calculate a plurality of updated deep learning parameters associated with the first partition in a scratchpad memory associated with the first memory side accelerator based on the received gradient updates.

17. The non-transitory machine-readable storage medium of claim 16, further comprising instructions that, if executed by the physical processing element, cause the first memory side accelerator to:

calculate a plurality of updated deep learning parameters for the first partition; and

update the globally addressable memory with the updated deep learning parameters for the first partition based on a condition.

18. The non-transitory machine-readable storage medium of claim 17, wherein the condition includes reception of the calculated gradient updates from each of the deep learning worker threads.

19. The non-transitory machine-readable storage medium of claim 17, wherein the condition includes a timer reaching a preset value after a first one of the calculated gradient updates is received by the first memory side accelerator.

Description:
MEMORY SIDE ACCELERATION FOR DEEP LEARNING PARAMETER UPDATES

BACKGROUND

[0001 ] Training a large-scale deep learning model can take weeks to months as the size of data increases. Distributed deep learning reduces the training time by separating the computation into multiple devices across multiple nodes. For example Distbelief, Project Adam, and Hama are examples of projects to parallelize training for large models on thousands of processors.

BRIEF DESCRIPTION OF THE DRAWINGS

[0002] The following detailed description references the drawings, wherein:

[0003] FIGs. 1 and 2 are block diagrams of computing systems capable of using memory side accelerators to facilitate deep learning, according to various examples;

[0004] FIG. 3 is a flowchart of a method for calculating updated deep learning parameters using memory side accelerators, according to an example;

[0005] FIG. 4 is a flowchart of a method for calculating deep learning parameters for a partition of parameters at a memory side accelerator, according to an example; and

[0006] FIG. 5 is a block diagram of a memory side accelerator capable of facilitating deep learning, according to an example.

[0007] Throughout the drawings, identical reference numbers may designate similar, but not necessarily identical, elements. An index number "N" appended to some of the reference numerals may be understood to merely denote plurality and may not necessarily represent the same quantity for each reference numeral having such an index number "N". Additionally, use herein of a reference numeral without an index number, where such reference numeral is referred to elsewhere with an index number, may be a general reference to the corresponding plural elements, collectively or individually. In another example, an index number of "I," "M," etc. can be used in place of index number N.

DETAILED DESCRIPTION

[0008] Deep learning can be used to perform tasks based on learned information. Examples of tasks that can be performed using deep learning include colorizing black and white images, adding sounds to silent movies, automatic machine translation, object classification in photographs, automatic handwriting generation, character text generation, image caption generation, automatic game playing, etc. Various implementations can be used based on what type of task is being performed.

[0009] In each case, training data can be used to train model parameters. The model parameters can then be used to implement the task based on an algorithm for that task. In one example, the task is automated machine translation (e.g., translating words in a picture on a smart phone from one language to another). Training for this task can include image recognition to determine what letters are present in the scene. The identified letters can be turned into text, translated, and then the image can be recreated with the translated text. Training sets can include fonts or known data sets (e.g., hand written data sets for a language).

[0010] Training a large-scale deep learning model can take weeks to months as the size of data increases. Distributed deep learning reduces the training time by separating the computation into multiple devices across multiple nodes. For example Distbelief, Project Adam, and Hama are examples of projects to parallelize training for large models on thousands of processors.

[001 1 ] A commonly used technique in distributed deep learning for both convolution neural network and recurrent neural network models is data parallelism. Here, each worker (e.g., a central processing unit (CPU) or graphical processing unit (GPU)) receives a subset of a batch of training data. Each worker iteratively processes new training data from its subset of batches of the training data. The workers communicate by exchanging gradient updates. A parameter server is used to provide each of the workers the same model parameters.

[001 2] The following is an example model of distributed deep learning. In this model of distributed deep learning, each worker receives a subset of training data and a full set of model parameters for each iteration of training. At the beginning of one iteration, every worker sends a pull request to the parameter server and gets a latest copy of the parameters W, which might contain hundreds of millions of floating-point values for a large deep learning model. Each copy of the parameters on each device is called a model replica. Each model replica works on a different input training data subset. For example, each subset can contain different images and all the subsets form one large batch of images for one iteration.

[001 3] Each model replica calculates its data gradients (in an example with three workers Δϋ1 , AD2, AD3) with its own mini-batch input and sends the gradients back (usually a push request) to the parameter server. The parameter server gathers the gradients from all the workers, calculates the average of the gradient, and updates the model accordingly. For example, a new W can equal the previous W plus a learning rate times an average of the data gradients. Shown as an equation, the new W can be expressed as W = W + learning rate * average (Δϋ1 , AD2, AD3). There is no explicit coordination among the model replicas other than implicit synchronization through the parameter server.

[0014] The traditional parameter server design has several limitations. Implementing such a system architecture is complex and usually requires engineering efforts because designing a reliable parameter server capable of handling many parallel pull/push requests is non-trivial. Dedicating CPU processes to perform a summation (or an average) of all data activations is not optimal in terms of number of read/write operations to memory. Further, periodic checkpointing of the model parameters incurs both latency and energy overhead. [0015] Accordingly, various examples described herein use memory side acceleration to simplify the parameter server design. Each of the model parameters are stored in a globally addressable memory pool. The memory pool can be non-volatile, which eliminates the overhead of checkpointing these model parameters. Instead of using a single parameter server, the functionality of the parameter server can be split among device nodes and implemented using memory side accelerators (MSAs). Each MSA can be customized to accelerate the partial model update process during each iteration in the training of deep learning applications. Example customizations include the use of Single Instruction, Multiple Data (SIMD) single-precision floating-point execution units, scratchpad memory, and a timer.

[0016] As used herein, deep learning parameters are data structures (e.g., floating point variables) that can be used with a set of input data to answer a question according to an algorithm that can be executed by a processing element. In a simple example, the algorithm can be executed to find features in an image based on the parameters (e.g., if a dot product of weights and an input set plus a bias > a threshold then the test is true, else, the test is false for presence of a particular feature). In some examples, the parameters can include weight parameters. In some examples, the parameters can include bias parameters. In other examples, the parameters can include other parameters that can be used to answer a question (or multiple questions) that are not technically a weight or a bias. Further, in some examples, the parameters can include thresholds.

[0017] The deep learning parameters can be trained using a deep learning approach. As noted above, the training can involve determination of a change to each parameter based on training information. Examples of such learning algorithms include gradient descent, various approaches used by Distbelief, Project Adam, and Hama, and stochastic gradient descent by backpropogation, among others.

[0018] As used herein, a gradient is a change to a parameter that is learned based on training information. The gradients can be used during a learning process. In an example of character recognition, a handwritten character and a known character value can be used as the training set for learning. Further, a learning rate can be incorporated as part of a gradient value or be processed at a later time.

[0019] FIGs. 1 and 2 are block diagrams of computing systems capable of using memory side accelerators to facilitate deep learning, according to various examples. The computing systems 100, 200 can include a number of processing nodes 1 10a - 1 1 On that can be used to process deep learning worker threads 1 12a - 1 12i. The deep learning worker threads 1 12a - 1 12i can each use corresponding training information 1 14a - 1 14i. The processing nodes 1 10 can be connected to globally addressable memory 120a - 120n using an interconnect 140.

[0020] In some examples, each portion of the globally addressable memory 120a - 120n can be connected via a memory controller 240a - 240n, as shown in FIG. 2. The memory controllers 240a - 240n can each include a memory side accelerator 144a - 144n. Further, the memory controllers 240a - 240n may include a scratchpad memory 146a - 146n. Deep learning parameters 130a - 130n can be included in the globally addressable memory 120a - 120n. In some examples, for redundancy and/or bandwidth, a portion of globally addressable memory 120 may be connected to the interconnect 140 via more than one memory controller 240. The memory controller 240 can accept memory requests from the fabric, schedule, and issue memory requests to the memory modules associated with the portion of globally addressable memory 120 associated with a particular memory controller 240. The MSAs can be implemented using a set of programmable cores incorporated in each memory controller. This can enable memory side acceleration for memory-intensive workloads.

[0021 ] Each of the processing nodes 1 10 can be used to implement a deep learning worker thread 1 12 for a subset of the training information 1 14. In some examples, there can be a master, slave relationship between a single deep learning worker thread 1 12a and a corresponding MSA thread 148a - 148n on each of the memory controllers 240a - 240n used to implement the approach described herein. [0022] The following is an example model of distributed deep learning corresponding to computing system 200. In this model of distributed deep learning, each deep learning worker thread 1 12 receives a subset of training information 1 14 and a full set of model parameters (parameter copy 216) for each iteration or epoch of training. At the beginning of one iteration or epoch, each deep learning worker thread 1 12 pulls the full set of deep learning parameters 130 from the globally addressable memory 120. As noted above, this can include a large number (e.g., hundreds of millions of floating-point values). Each copy of the parameters is called a parameter copy 216. The deep learning parameters can correspond to the deep learning model used. For example, in the case of image processing, the parameters may be associated with features found in an image. In some examples, the features have a level of importance associated. Examples of deep learning parameters can include weight parameters, bias parameters, and threshold parameters.

[0023] The deep learning parameters 130 may be stored using one or multiple data structures, such as a tensor, an array, a multi-dimensional vector, etc. For example, the deep learning parameters can be stored as a plurality of floating point numbers (e.g., single-precision floating point values) stored in a tensor data structure. Each of the partitions can include a subset of the floating point numbers. In some examples, the floating point values can be addressed using load/store instructions. Conceptually speaking, a tensor of all of the deep learning parameters 130 combined can be split into partitions of subsets of the tensor in each of the partitions, for example, deep learning parameters 130a, 130n, etc.

[0024] The deep learning parameters 130 are partitioned across the globally addressable memory 120 according to MSAs 144 and/or memory controllers 240. For explanatory purposes, in a simple example of three partitions where each partition includes one hundred parameters, a first MSA 144a can be associated with a first partition of the deep learning parameters 130 (representing parameters 0 - 99), a second MSA (not shown) can be associated with a second partition of the deep learning parameters (not shown) (representing parameters 100 - 199), and a third MSA 144n can be associated with a third partition of the deep learning parameters 130n (representing parameters 200 - 299). Each deep learning worker thread 1 12 pulls the deep learning parameters 130 by pulling a copy of each of the partitions. The deep learning worker threads 1 12 can pull the copies via respective associated memory controllers 240.

[0025] Each deep learning worker thread 1 12 can work on a different input training data subset of the training information. The number of deep learning worker threads 1 12 can be different from the number of partitions that the deep learning parameters are stored in. As noted above, in one example, each set of training information 1 14a - 1 14n can include a set of images. In some examples, duplicates of the training information may occur (e.g., one image may be included in two subsets of training information). The subsets of the training information 1 14a - 1 14n combined can make up a large batch of training information used for an iteration of training.

[0026] As used herein, a deep learning worker thread 1 12 is a process that executes on a processing node 1 10 that determines data gradients based on a parameter copy 216 and associated training information 1 14. Each deep learning worker thread 1 12 calculates its data gradients (in an example with three workers Δϋ1 , AD2, AD3) with its own respective training information and send the gradients back (e.g., via a push request) to the memory controllers 240/MSAs 144 that correspond to each partition. In the example above, each deep learning worker thread 1 12a is to return a gradient update to MSA 144a corresponding to parameters 0 - 99, another gradient update to the second MSA corresponding to parameters 100 - 199, and a third gradient update to the third MSA 144n corresponding to parameters 200 - 299. In some examples, the deep learning worker threads 1 12 can use an instruction to write (or use another custom instruction) to a particular address range that is associated with the MSA 144. The MSA 144 can expect the address and execute an MSA thread 148 to process the information.

[0027] Calculation of the gradients can be based on specific implementation of the model and use case. The calculation can be based on an algorithm that is executed by a physical processing element of the processing node using the parameter copy 216 and associated training information 1 14.

[0028] In one example, the gradients determined by the deep learning worker threads can be in the form of gradients that take into account a learning rate (e.g., a multiplier). In another example, the gradients can be in the form of data gradients that do not take into account a learning rate. In this other example, the MSA 144 can perform the calculation to take into account the learning rate.

[0029] In response to the deep learning worker threads 1 12 pushing the calculated gradients up to the corresponding MSAs 144, the respective MSAs 144 receive the gradients. Each MSA 144 can execute an MSA thread 148 or multiple MSA threads 148 to calculate an updated deep learning parameter for the partition associated with the MSA 144. The MSA 144 can store parameter updates in the associated scratchpad memory 146. This set of updated deep learning parameters can be considered a partial result. In one example, the update can add the received gradient to the current temporary set of updated deep learning parameters for the partition. The original set of the parameters in the scratchpad memory 146a can be the deep learning parameters 130 associated with the partition at the beginning of the iteration/epoch. As noted above, SIMD single-precision floating point instructions may be used to implement MSA thread execution.

[0030] In one example, each of the MSAs 144 can update the corresponding partition of the deep learning parameters 130 in the globally addressable memory 120 based on the respective updated copy stored in the scratchpad memory 146. The update can be triggered based on a condition.

[0031 ] In one example, the condition can be based on reception by the MSA 144 of calculated gradients from each of the deep learning worker threads 1 12 (e.g., once the MSA 144 updates the temporary deep learning parameters in the partition based on each of the received gradients).

[0032] In another example, the condition can include a timer reaching a preset value after a first one of the calculated gradient updates is received by the respective MSA 144. In one example for illustrative purposes, assume that there are one hundred deep learning worker threads 1 12. When the MSA 144 receives the first set of calculated gradient updates, the timer starts. In some examples, the timer can be incorporated as part of the MSA 144. Other triggers for the timer can also be used (e.g., starting the timer at the beginning of an iteration). When the timer ends, the globally addressable memory 120 is updated with the current updated deep learning parameters 130 in the scratchpad memory 146. In one example, the remaining gradients can be discarded. Due to the nature of deep learning being self-error-tolerant, the loss may be considered acceptable. In some examples, either of the conditions being met can cause the update of the globally addressable memory 120.

[0033] When each MSA 144 updates the globally addressable memory 120, it can also update (e.g., increment by one) a ready counter 220. The ready counter 220 can be stored in the globally addressable memory 120. The ready counter 220 can be considered to be in a ready state when each of the MSAs 144 have updated their respective partitions of the deep learning parameters 130 in the globally addressable memory 120. The ready counter being ready can be used to trigger the next iteration or epoch for deep learning. For example, the deep learning worker threads 1 12 can poll the ready counter 220 or a separate thread can be used to poll the ready counter 220 and let each deep learning worker thread 1 12 know when the ready counter 220 is ready. In another example, instead of a ready counter, each MSA 144 may set a ready signal for its respective partition that each of the deep learning worker threads 1 12 can read. In some examples, the ready signal can be part of a single data structure.

[0034] As noted above, the globally addressable memory 120 can be nonvolatile. Because of this feature, the deep learning parameters 130 need not be check pointed, which can reduce workload overhead for the process. In another example, the training information 1 14 can be stored in a volatile memory associated with the respective processing nodes 1 10 corresponding to the deep learning worker threads 1 12. In one example, the volatile memory can be direct attached to the processing nodes 1 10. In another example, the direct attached memory can be non-volatile instead of volatile.

[0035] With the approaches described here, memory capacity and bandwidth requirements can be reduced. For example, because the partial results are stored in the scratchpad memory 146, less memory is needed to store each of the gradients and then perform operations on the whole set. Moreover, the number of read/write operations can be reduced. For example, in models such as AlexNet or ResNet-152, millions of parameters may be used, but, per iteration, these are read once from non-volatile memory and written once per iteration. In an example using 60 million parameters, 120 million references would be made. On the other hand, a parameter server collecting all of the data gradients and then processing these, the memory references during a single iteration may be as high as 7.74 billion.

[0036] As used herein, a processing node 1 10 is a shared memory processing element that has one or multiple physical processors within the processing node. In one example, each processing node includes a direct attached local main memory (e.g., random access memory) as well as one or multiple caches within the processing node. In another example, the processing nodes 1 10 can include access to the globally addressable memory 120 via the interconnect 140.

[0037] The interconnect 140 can be used to implement a fabric memory. In one example, direct attached memory between multiple processing nodes 1 10 are globally addressable using the interconnect 140. In some examples, the interconnect 140 can be implemented using a communication network, such as Ethernet, InfiniBand, Fibre Channel, and SeaStar. Further, in some examples, the globally addressable memory 120 can be non-volatile. As such, because the globally addressable memory 120 is non-volatile, the system need not spend time to checkpoint the parameters. Examples of non-volatile memory include memristors, non-volatile Resistive Random Access Memory (ReRAM), flash memory, Ferroelectric RAM, Magnetoresistive RAM, Phase-change RAM, Millipede memory, etc. In some examples, more than one memory controller 240 can be used to connect the interconnect 140 to a particular portion of the globally addressable memory.

[0038] The computing systems 100, 200 can communicate with other devices using input/output interfaces and peripheral devices (e.g., using network interface cards, keyboard, mouse, speaker, display, etc.). For example, processing nodes can communicate with other processing nodes and/or other devices via one or multiple communication network(s) (not shown). The communication network(s) can use wired communications, wireless communications, or combinations thereof. Further, the communication network(s) can include multiple sub communication networks such as data networks, wireless networks, telephony networks, etc. Such networks can include, for example, a public data network such as the Internet, local area networks (LANs), wide area networks (WANs), metropolitan area networks (MANs), cable networks, fiber optic networks, combinations thereof, or the like. In certain examples, wireless networks may include cellular networks, satellite communications, wireless LANs, etc. Further, the communication network can be in the form of a direct network link between devices. Various communication structures and infrastructure can be utilized to implement the communication network(s).

[0039] By way of example, the processing nodes 1 10 and other devices can communicate with each other and other components with access to the communication network via a communication protocol or multiple protocols. A protocol can be a set of rules that defines how nodes of the communication network interact with other devices. Further, communications between network nodes can be implemented by exchanging discrete packets of data or sending messages. Packets can include header information associated with a protocol (e.g., information on the location of the network node(s) to contact) as well as payload information.

[0040] FIG. 3 is a flowchart of a method for calculating updated deep learning parameters using memory side accelerators, according to an example. Although execution of method 300 is described below with reference to computing system 200, other suitable components for execution of method 300 can be utilized (e.g., computing system 100). Additionally, the components for executing the method 300 may be spread among multiple devices. Method 300 may be implemented in the form of executable instructions stored on a machine- readable storage medium and/or in the form of electronic circuitry.

[0041 ] At 302, deep learning parameters 130 are stored in a globally addressable memory 120 that is addressable by each of a number of processing nodes 1 10. As noted above, the globally addressable memory 120 includes a number of portions that are each coupled to a memory controller 240 that includes a MSA 144. In some examples, more than one memory controller 240 may be used to access the memory of a single portion. Each of the MSAs 144a - 144n is associated with a partition of the deep learning parameters 130a - 130n. As noted above, the deep learning parameters can be included in a tensor of floating point numbers. Each partition would include a subset of the deep learning parameters. In one example, there can be Q MSAs 144 and each MSA 144 can be associated with roughly 1/Q of the parameters. Other distributions of the partitions can be used.

[0042] At the beginning of an iteration, deep learning worker threads 1 12 can pull down a parameter copy 216 for each training thread. In one example, there can be P workers and each can take roughly 1/P of the training information. As noted above each of the partitions can be copied to generate the parameter copy 216. Further, the scratchpad memory 146 and any counters/ready signals can be cleared at the beginning of an iteration or epoch. Other distributions of the training information can be used.

[0043] At 304, the deep learning worker threads 1 12 can calculate gradient updates for the respective subsets of training information 1 14 using the corresponding processing node 1 10. The deep learning worker threads 1 12 can use an instruction to provide the partitions of the calculated gradient updates to the MSAs associated with each partition.

[0044] At 306, each MSA 144 receives calculated gradient updates for the partition corresponding to the MSA 144 from one or multiple deep learning worker threads 1 12. At 308, each MSA 144 calculates an updated deep learning parameter for the corresponding partition of the deep learning parameters 130. As part of calculating the updated deep learning parameter, an MSA thread 148 can be created for each of the deep learning worker threads 1 12 that provide calculated gradient updates. Each thread can be used to load a current version of the parameters in the scratchpad memory 146 and the associated calculated gradient, add the two together, and then store the updated temporary deep learning parameter in the scratchpad memory 146.

[0045] As noted above, based on a condition, each of the MS As 144 can update the corresponding partition of the deep learning parameters in the globally addressable memory 120 based on the respective updated copy in the respective scratchpad memory 146. As noted above, in one example, the condition is based on the reception of each of the calculated gradient updates associated with the partition from each of the subsets of the training information (e.g., the corresponding threads). In another example, the condition includes a timer reaching a preset value. In some examples, the preset value can be set by one of the deep learning worker threads 1 12 or a separate control thread. Moreover, the timer can start at a customized time (e.g., at the start of an iteration, after a first one of the deep learning worker threads 1 12 provides a gradient update, etc.). As noted above, a ready counter or signal can be incremented/updated each time a partition of the deep learning parameters are written back to the globally addressable memory 120.

[0046] FIG. 4 is a flowchart of a method for calculating deep learning parameters for a partition of parameters at a memory side accelerator, according to an example. FIG. 5 is a block diagram of a memory side accelerator capable of facilitating deep learning, according to an example.

[0047] Although execution of method 400 is described below with reference to MSA 500, other suitable components for execution of method 400 can be utilized (e.g., MSA 144). Method 400 may be implemented in the form of executable instructions stored on a machine-readable storage medium, such as storage medium 520, and/or in the form of electronic circuitry. [0048] Processing element 510 may be one or multiple central processing units (CPU), one or multiple programmable processors, one or multiple semiconductor-based microprocessors, other hardware devices suitable for retrieval and execution of instructions stored in machine-readable storage medium 520, or combinations thereof. In one example, a SIMD instruction set can be used to implement features of the processing element 510. The processing element 510 can be implemented as a physical device. Moreover, in one example, the processing element 510 may include multiple cores on a chip, include multiple cores across multiple chips, or combinations thereof. Processing element 510 may fetch, decode, and execute instructions 522, 524, and 526 to implement the memory side acceleration tasks described herein. As an alternative or in addition to retrieving and executing instructions, processing element 510 may include at least one integrated circuit (IC), other control logic, other electronic circuits, or combinations thereof that include a number of electronic components for performing the functionality of instructions 522, 524, and 526.

[0049] Machine-readable storage medium 520 may be any electronic, magnetic, optical, or other physical storage device that contains or stores executable instructions. Thus, machine-readable storage medium may be, for example, Random Access Memory (RAM), an Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage drive, a Compact Disc Read Only Memory (CD-ROM), and the like. As such, the machine- readable storage medium can be non-transitory. As described in detail herein, machine-readable storage medium 520 may be encoded with a series of executable instructions for providing memory side acceleration capabilities in a deep learning model.

[0050] At 402, the processing element 510 can retrieve a partition of a number of deep learning parameters stored in a globally addressable memory that is addressable by each of a number of processing nodes in the computing system by executing deep learning parameter memory instructions 522. As noted above, the globally addressable memory includes a number of portions that are each coupled to at least one of a number of MSAs. Each of the MSAs is associated with a partition of the deep learning parameters. Further, the deep learning parameters are included as part of a data structure, for example, a tensor of floating point numbers, and each partition includes a subset of the tensor.

[0051 ] At 404, the MSA 500 receives multiple gradient updates associated with the partition that corresponds to the MSA 500 from a number of deep learning worker threads of the computing system that are used to train the deep learning model from batches of training data. Communication instructions 524 can be executed or separate communication interfaces can be implemented to determine which information received at a memory controller that the MSA 500 is a part of is a gradient update. In one example, the corresponding threads can use an instruction to an address associated with the MSA 500 to trigger usage of the MSA.

[0052] At 406, the MSA 500 can calculate multiple updated deep learning parameters associated with the partition in a scratchpad memory 528 based on the received gradients by executing parameter update instructions 526. In one example, the retrieved partition of the deep learning parameters is a starting point and a first set of gradients is added to the deep learning parameters and then the result is stored in the scratchpad memory 528 as a partial update. Following received gradient updates are then added to the partial update when received and stored in the scratchpad memory 528. A thread of execution can be implemented to perform the partial update. In some examples, if a gradient is received while a thread is working on a partial update, the gradient can be stored in the scratchpad memory 528 and used when the thread has completed execution. In other examples, the other threads can work at the same time (e.g., on different portions of the parameters).

[0053] The MSA 500 can update the deep learning parameters of the partition in the globally addressable memory once a condition is met. As noted above, in one example, the condition can be reception and processing of each of the gradients expected to be received from the corresponding worker threads that are used for training. In another example, the condition can be based on a timer that starts when a first one of the gradients is received and ends when it meets a predetermined threshold number. As noted above, a thread of execution can customize the threshold number.

[0054] While certain implementations have been shown and described above, various changes in form and details may be made. For example, some features that have been described in relation to one implementation and/or process can be related to other implementations. In other words, processes, features, components, and/or properties described in relation to one implementation can be useful in other implementations. Furthermore, it should be appreciated that the systems and methods described herein can include various combinations and/or sub-combinations of the components and/or features of the different implementations described. Thus, features described with reference to one or more implementations can be combined with other implementations described herein.