About Criteo’s Q4,15 Star Performance Earning Peiji Chen 03/01/2016
While Facebook’s DSP experiment is a failure(see link here), Criteo keeps winning performance customers and market shares, stock is climbing back...
$LAYYYTER
Monterey Bay Aquarium

Love Begins
todays bird

@theartofmadeline
sheepfilms
RMH
Not today Justin

shark vs the universe
tumblr dot com

Product Placement
DEAR READER

Janaina Medeiros
he wasn't even looking at me and he found me

Kaledo Art
h
Stranger Things
Keni

roma★

izzy's playlists!
seen from Russia
seen from Brazil

seen from Türkiye
seen from South Africa
seen from Malaysia

seen from Canada
seen from T1
seen from Venezuela

seen from China

seen from Malaysia

seen from Venezuela

seen from Venezuela

seen from Venezuela
seen from United States
seen from United States
seen from United States
seen from United States
seen from United States
seen from United States
seen from United Kingdom
@old-tech-yahoo
About Criteo’s Q4,15 Star Performance Earning Peiji Chen 03/01/2016
While Facebook’s DSP experiment is a failure(see link here), Criteo keeps winning performance customers and market shares, stock is climbing back...
A lot of people think Silicon Valley is a cool place to live, but it has its own dark side, too — including these 13 things we found on Quora.
silicon valley, high tech, life, work
These are some of the things that are making people uncomfortable both in and about the Valley. None of these issues are anyone's fault. It's just the market at work -- the capital market, the market for talent, the real estate market.
Omid Architecture and Protocol
By Edward Bortnikov, Idit Keidar (Search Systems, Yahoo Labs), and Francisco Perez-Sorrosal (Yahoo Search)
In our previous post, we introduced Omid, Yahoo’s new efficient and scalable transaction processing platform for Apache HBase. In this post, we first overview Omid’s architecture concepts, and then delve into the system design and protocols.
Omid’s client API offers abstractions both for control and for data access. The abstractions are offered by a client library, and transaction consistency is ensured by a central entity called Transaction Status Oracle (TSO), whose operation we explain in the post. The Omid client library accesses the data directly in HBase, and interacts with the TSO only to begin, commit or rollback transactions. This separation between the control and the data planes is instrumental for system scalability.
For simplicity, we defer discussion of the TSO’s reliability and internal scalability to future posts; for now, let us assume that this component scales infinitely and never fails.
Architecture Overview
As we detailed in the previous blog post, Omid provides a lock-free Snapshot Isolation (SI) implementation that scales far better than traditional two-phase locking approaches. Namely, transactions can execute concurrently until commit, at which time write-write conflicts are resolved. Ties between two transactions that overlap both in time and in space (so committing both of them would violate SI) are broken by aborting one of them, usually the one that attempts to commit later.
The simplest way to break ties is via a central arbiter that serializes all commit requests and resolves conflicts based on this order. Distributed implementations, for example, two-phase commit, are more expensive, complex, and error-prone. Omid therefore takes the simpler, centralized approach. It employs a centralized management service for transactions, the Transaction Status Oracle, or TSO, which coordinates the actions of clients. The main task of the TSO is to detect write-write conflicts among concurrent transactions, as needed for ensuring SI semantics. Similarly to any centralized service, the TSO is vulnerable to becoming a single-point-of-failure and a performance bottleneck. We will discuss Omid’s approach to high availability (HA) and scalability in a forthcoming post. Here, we describe only the operation of a single TSO in failure-free scenarios.
Omid leverages the multi-versioning support in the underlying HBase key-value store, which allows transactions to read consistent snapshots of changing data as needed for SI. Specifically, when the item associated with an existing key is overwritten, a new version (holding the key, its new value, and a new version number) is created while the previous version persists. An old version might be required as long as there is some active transaction that had begun before the transaction that overwrote this version has committed. Though this may take a while, overwritten versions eventually become obsolete. Omid takes advantage of HBase’s coprocessors to implement a garbage-collecting algorithm in order to free up the disk space taken up by such obsolete versions when doing compactions.
In addition to storing the application data, HBase is further used for persistent storage of transaction-related metadata, which is accessed only by the transactional API and not exposed to the user, as will be described shortly.
One of the functions of the TSO is generating version numbers (timestamps) for all client transactions. This is achieved via a subcomponent, the so-called Timestamp Oracle, that implements a central logical clock. In order to preserve correctness in shutdown/restart scenarios, the Timestamp Oracle maintains an upper bound (maximum timestamp) of this clock in a reliable repository, which can be either an HBase table or a znode in Apache Zookeeper.
The following diagram summarizes Omid’s system components and the interactions among them. Note that the TSO is only involved in the control path (for transaction begin/commit/rollback), whereas the Omid clients interact with HBase directly in the data path. This separation is paramount for scalability.
Fig 1: Omid components. Omid clients use the TSO to create transactional contexts. Clients also allow to access data that resides in data tables in HBase transactionally. The TSO is in the control path for conflict detection when transactions are completed. Data is multi-versioned and a garbage-collecting coprocessor cleans up obsolete versions. The TSO and the Timestamp Oracle maintain some persistent and transient metadata in HBase (although it can be also stored in other storage systems).
Data and Metadata
As noted above, user data resides in HBase and is multi-versioned. An item’s version number is the transaction identifier, txid, of the transaction that wrote it. The txid is returned by the TSO in response to a begin call.
Omid exploits HBase also for storing persistent metadata, which comes in two flavors. First, it augments each data item with a shadow cell, which indicates the commit status of the transaction that wrote it. Initially, when an item is written during a transaction, its shadow cell is set to tentative, i.e., potentially uncommitted. At commit time, the client obtains from the TSO the transaction’s commit timestamp (commit ts) and writes this timestamp to the shadow cells of its writeset, which contains all the items written by the transaction. In addition, Omid manages a commit table (CT) tracking the commit timestamps of transactions. The data maintained in the CT is transient, being removed by the client when the transaction completes.
The diagram below summarizes Omid’s data model and flow.
Fig 2: Omid data model. Clients use the TSO to obtain a transaction identifier (txid) when they begin a transaction, and a commit timestamp (commit ts) when they commit it. Data is stored in HBase with the txid as the version number, and the commit ts in a shadow cell. Before the commit ts is set, the written data is tentative, and the client consults the Commit Table to determine its status.
Transaction Protocol Overview
The begin API produces a unique txid, which is used by all subsequent requests. In Omid, txid also serves as the read (snapshot) timestamp. The commit API produces a commit ts, which determines the transaction’s order in the sequence of committed transactions. Both timestamps are based on a logical clock maintained by the Timestamp Oracle.
Recall from our previous post that SI allows transactions to appear to execute all reads at one logical point and all writes at another (later) point. In Omid, the txid is the time of the logical clock when the transaction begins, and it determines which versions the transaction will read; the commit ts, on the other hand, is the logical time during commit, and all the transaction’s writes are associated with this time (via the shadow cells).
Since transaction commit needs to be an atomic step, an application triggering a transaction: first tentatively writes all its information to data items without a commit timestamp in the corresponding shadow cells through the Omid client API (e.g. using transactional put or delete operations); then atomically commits it (in case there are no conflicts) via the TSO; and finally, once the client has received the commit ack from the TSO, it updates the shadow cells of these data items to include its commit ts. A transaction is considered complete once it finishes updating the shadow cells of all items in its writeset. Only at that point, the control is returned to the application.
The post-commit completion approach creates a window when the transaction is already committed but its writes are still tentative. However, a client may be delayed or even fail after committing a transaction and before completing it. Consider an incomplete committed transaction T. Transactions that begin during T’s completion phase obtain a txid that is larger than T’s commit ts, and yet during their operation, they may encounter in HBase data tables some items with tentative writes by T and others with complete writes by T. In order to ensure that such transactions see T’s updates consistently, Omid tracks the list of incomplete committed transactions in a persistent Commit Table (CT), which is also stored in HBase. Each entry in the CT maps a committed transaction’s id to its commit timestamp. The act of writing the (txid, commit ts) pair to the CT makes the transaction durable, regardless of subsequent client failures, and is considered the commit point of the transaction.
Transactions that encounter tentative writes during their reads refer to the CT in order to find out whether the value has been committed or not. In case it has, they help complete the write. This process is called healing, and is an optimization that might reduce accesses to the commit table by other transactions.
Fig 3: Omid Transaction Flow (TX = Transaction; TS=Timestamp)
Client-Side Operation
The Omid client depicted in the previous figure executes the following actions in the name of a client application using transactions:
Begin: The client obtains from the TSO a start timestamp that exceeds all the write timestamps of committed transactions. This timestamp becomes the transaction identifier (txid). It is also used to read the appropriate versions when reading data.
Get(txid, key): The get operation performs the following actions (in pseudo-code):
scan versions of key that are lower than txid, highest to lowest
if version is not tentative, return its value
else, lookup the version’s id in CT
if present (the writing transaction has committed),
update the commit ts (healing process) and return the value else, re-read the version and return the value if no longer tentative. In case no value has been returned, continue to the next version.
Put(txid, key/value): Adds a new tentative version of the key/value pair and the txid as the version.
Commit(txid, writeset): The client requests commit from the TSO for its txid, and provides in writeset the set of keys it wrote to. The TSO assigns it a new commit timestamp and checks for conflicts for the transaction’s writeset. If there are none, it commits the transaction by writing the (txid, commit ts) pair to the CT. Then the TSO returns the control to the client providing also this (txid, commit ts) pair. Finally, the client adds the commit ts to all data items it wrote to (so its writes are no longer tentative) and deletes the txid entry from the CT.
Summary
At Yahoo, we have recently open-sourced the Omid project, a transactional framework for HBase. In this blog post we discussed the architecture and protocols behind Omid. We’ve shown the main components involved and we’ve described their interactions, which enable our framework to provide transactions on top of HBase in an efficient and scalable manner.
The system has been implemented with HBase in mind, and therefore our presentation is in HBase terms. That said, the design principles are generic and database-neutral. Omid can be adapted to work with any persistent key-value store with multi-version concurrency control.
NFL live stream on YAHOO and great ads
Original link is here http://www.businessinsider.com/top-tech-companies-revenue-per-employee-2015-10
Large Scale Distributed Deep Learning on Hadoop Clusters
By Cyprien Noel, Jun Shi and Andy Feng (@afeng76), Yahoo Big ML Team
Introduction
In the last 10 years, Yahoo has progressively invested in building and scaling Apache Hadoop clusters with a current footprint of more than 40,000 servers and 600 petabytes of storage spread across 19 clusters. As discussed at the 2015 Hadoop Summit, we have developed scalable machine learning algorithms on these clusters for classification, ranking, and word embedding based on a home-grown parameter server. Hadoop clusters have now become the preferred platform for large-scale machine learning at Yahoo.
Deep learning (DL) is a critical capability demanded by many Yahoo products. At 2015 RE.WORK Deep Learning Summit, the Yahoo Flickr team (Simon Osindero and Pierre Garrigues) explained how deep learning is getting applied for scene detection, object recognition, and computational aesthetics. Deep learning empowers Flickr to automatically tag all user photos, enabling Flickr end users to organize and find photos easily.
To enable more Yahoo products to benefit from the promise of deep learning, we have recently introduced this capability natively into our Hadoop clusters. Deep learning on Hadoop provides the following major benefits:
Deep learning can be directly conducted on Hadoop clusters, where Yahoo stores most of its data. We avoid unnecessary data movement between Hadoop clusters and separate deep learning clusters.
Deep learning can be defined as first-class steps in Apache Oozie workflows with Hadoop for data processing and Spark pipelines for machine learning.
YARN works well for deep learning. Multiple experiments of deep learning can be conducted concurrently on a single cluster. It makes deep learning extremely cost effective as opposed to conventional methods. In the past, we had teams use “notepad” to schedule GPU resources manually, which was painful and worked only for a small number of users.
Deep learning on Hadoop is a novel approach for deep learning. Existing approaches in the industry require dedicated clusters whereas Deep learning on Hadoop enables the same level of performance as with dedicated clusters while simultaneously providing all the benefits listed above.
Enhancing Hadoop Clusters
To enable deep learning, we added GPU nodes into our Hadoop clusters (illustrated below). Each of these nodes have 4 Nvidia Tesla K80 cards, each card with two GK210 GPUs. These nodes have 10x processing power than the traditional commodity CPU nodes we generally use in our Hadoop clusters.
In a Hadoop cluster, GPU nodes have two separate network interfaces, Ethernet and Infiniband. While Ethernet acts as the primary interface for external communication, Infiniband provides 10X faster connectivity among the GPU nodes in the cluster and supports direct access to GPU memories over RDMA.
By leveraging YARN’s recently introduced node label capabilities (YARN-796), we enable jobs to state whether containers should be launched in CPU or GPU nodes. Containers on GPU nodes use Infiniband to exchange data at a very high speed.
Distributed Deep Learning: Caffe-on-Spark
To enable deep learning on these enhanced Hadoop clusters, we developed a comprehensive distributed solution based upon open source software libraries, Apache Spark and Caffe. One can now submit deep learning jobs onto a cluster of GPU nodes via a command as illustrated below.
spark-submit –master yarn –deploy-mode cluster
–files solver.prototxt, net.prototxt
–num-executors <# of EXECUTORS>
–archives caffe_on_grid.tgz
–conf spark.executorEnv.LD_LIBRARY_PATH=“./caffe_on_grid.tgz/lib64”
–class com.yahoo.ml.CaffeOnSpark caffe-on-spark-1.0-jar-with-dependencies.jar
-devices <# of GPUs PER EXECUTOR>
-conf solver.prototxt
-input hdfs://<TRAINING FILE>
-model hdfs://<MODEL FILE>
In the command above, users specify the number of Spark executor processes to be launched (–num-executors), the number of GPUs to be allocated for each executor (-devices), the location of training data on HDFS, and the HDFS path where the model should be saved. Users use standard caffe configuration files to specify their caffe solver and deep network topology (ex. solver.prototxt, net.prototxt).
As illustrated above, Spark on YARN launches a number of executors. Each executor is given a partition of HDFS-based training data, and launches multiple Caffe-based training threads. Each training thread is executed by a particular GPU. After back-propagation processing of a batch of training examples, these training threads exchange the gradients of model parameters. The gradient exchanged is carried out in an MPI Allreduce fashion across all GPUs on multiple servers. We have enhanced Caffe to use multiple GPUs on a server and benefit from RDMA to synchronize DL models.
Caffe-on-Spark enables us to use the best of Spark and Caffe for large scale deep learning. DL tasks are launched easily as any other Spark application. Multiple GPUs in a cluster of machines are used to train models from HDFS-based large datasets.
Benchmarks
Caffe-on-Spark enables (a) multiple GPUs, and (b) multiple machines to be used for deep learning. To understand the benefits of our approach, we performed benchmarks on ImageNet 2012 dataset.
First, we looked into the progress of deep learning for AlexNet with 1 GPU, 2 GPUs, 4 GPUs and 8 GPUs with a single Spark executor. As illustrated in the diagram below, training time decreases as we add more GPUs. With 4 GPUs, we reached 50% accuracy in about 15/43=35% the time required by a single GPU. All these executions use identical total batch size 256. The setup with 8 GPUs didn’t show significant improvement over 4, as the overall batch size was too small on each GPU to use the hardware efficiently.
Next, we conducted a distributed benchmark with GoogLeNet, which is much deeper and uses more convolutions than AlexNet, and thus requires more computation power. In every run, we arrange each GPU to handle batches of size 32, for an effective batch size of 32n when n GPUs are used. Our distributed algorithm is designed to produce models and end-result precision equivalent to running on a single GPU. 80% top-5 accuracy (20% error) was reached in 10 hours of training with 4 servers (4x8 GPUs). Notice that 1 GPU training reached only 60% top-5 accuracy (40% error) after 40 hours.
GoogLeNet scales further with the number of GPUs. For top-5 accuracy 60% (40% error), 8 GPUs achieved 680% speedup over 1 GPU. Table below also shows the speedup for top-5 accuracy 70% and 80%. The speedup could be larger if we adjust batch size carefully (instead of total batch size 32n).
Open Source
Continuing Yahoo’s commitment to open source, we have released some of our code into github.com/BVLC/caffe:
#2114 … Allow Caffe to use multiple GPUs within a computer
#1148 … RDMA transfers across computers
#2386 … Improved Caffe’s data pipeline and prefetching
#2395 … Added timing information
#2402 … Make Caffe’s IO dependencies optional
#2397 … Refactored Caffe solvers code
In a follow-up post in the coming weeks, we will share the detailed design and implementation of Caffe-on-Spark. If there is enough interest from the community, we may open source our implementation. Please let us know what you think at [email protected].
Conclusion
The post describes early steps in bringing Apache Hadoop ecosystem and deep learning together on the same heterogeneous (GPU+CPU) cluster. We are encouraged by the early benchmark results and plan to invest further in Hadoop, Spark, and Caffe to make deep learning more effective on our clusters. We look forward to working closely with the open source communities in related areas.
Test
test